summaryrefslogtreecommitdiffstats
path: root/src/NOTES
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2015-02-15 12:34:33 -0800
committerElliott Hughes <enh@google.com>2015-02-15 16:11:56 -0800
commit41f677100e15f315f638774fbd055e497fc90069 (patch)
tree961dfef28571e02a7d969fbba9bb51991086476b /src/NOTES
parentdb42bd18ad7a482e080e506f47121383e19274ef (diff)
downloadandroid_external_elfutils-41f677100e15f315f638774fbd055e497fc90069.tar.gz
android_external_elfutils-41f677100e15f315f638774fbd055e497fc90069.tar.bz2
android_external_elfutils-41f677100e15f315f638774fbd055e497fc90069.zip
Export elfutils headers and lose the version number from the path.
Having the version number in the path just means that diffs for updates are completely unusable. perf refers to libdw.h, libdwfl.h, and version.h as <elfutils/libdw.h> and so on, so we do still need to do some manual work there, but let's use symlinks rather than duplicating the header files. Change-Id: I9fd3c5f5024bde12747fdb1c06d21cdcb3418f03
Diffstat (limited to 'src/NOTES')
-rw-r--r--src/NOTES73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/NOTES b/src/NOTES
new file mode 100644
index 00000000..4f06b8d2
--- /dev/null
+++ b/src/NOTES
@@ -0,0 +1,73 @@
+- old GNU ld's behavior wrt DSOs seems to be severely broken.
+
+ y.o reference foo()
+ y1.o defines foo(), references bar()
+ y2.o defines bar()
+ libbar.so defines bar()
+
+ Running
+
+ gcc -o y y.o -lbar y1.o y2.o
+
+ uses the bar() definition from libbar.so and does not mention the definition
+ in y2.o at all (no duplicate symbol message). Correct is to use the
+ definition in y2.o.
+
+
+ y.o reference foo()
+ y1.o defines foo(), references bar()
+ y2.o in liby2.a defines bar()
+ libbar.so defines bar()
+
+ Running
+
+ gcc -o y y.o -lbar y1.o -ly3
+
+ has to use the definition in -lbar and not pull the definition from liby3.a.
+
+
+- the old linker follows DT_NEEDED entries and adds the objects referenced
+ this way which define a symbol which is needed as a DT_NEEDED to the
+ generated binary. This is wrong since the DT_NEEDED changes the search
+ path in the object (which is breadth first).
+
+
+- the old linker supported extern "C++", extern "java" in version scripts.
+ I believe this implementation is severly broken and needs a redesign
+ (how do wildcards work with these languages*?). Therefore it is left
+ out for now.
+
+
+- what should happen if two sections in different files with the same
+ name have different types and/or the flags are different
+
+
+- section names in input files are mostly irrelevant. Exceptions:
+
+ .comment/SHT_PROGBITS in strip, ld
+
+ .debug \
+ .line |
+ .debug_srcinfo |
+ .debug_sfnames |
+ .debug_aranges |
+ .debug_pubnames |
+ .debug_info |
+ .debug_abbrev |
+ .debug_line |
+ .debug_abbrev > DWARF sections in ld
+ .debug_line |
+ .debug_frame |
+ .debug_str |
+ .debug_loc |
+ .debug_macinfo |
+ .debug_weaknames |
+ .debug_funcnames |
+ .debug_typenames |
+ .debug_varnames /
+
+ Sections created in output files follow the naming of special section
+ from the gABI.
+
+ In no place is a section solely indentified by its name. Internal
+ references always use the section index.