From 41f677100e15f315f638774fbd055e497fc90069 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Sun, 15 Feb 2015 12:34:33 -0800 Subject: 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 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 --- src/NOTES | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/NOTES (limited to 'src/NOTES') 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. -- cgit v1.2.3