74 lines
1.9 KiB
Plaintext
74 lines
1.9 KiB
Plaintext
|
- 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.
|