summaryrefslogtreecommitdiff
path: root/elfutils/NOTES
diff options
context:
space:
mode:
Diffstat (limited to 'elfutils/NOTES')
-rw-r--r--elfutils/NOTES73
1 files changed, 73 insertions, 0 deletions
diff --git a/elfutils/NOTES b/elfutils/NOTES
new file mode 100644
index 000000000..4f06b8d2d
--- /dev/null
+++ b/elfutils/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.