| - 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. |