]> git.ipfire.org Git - thirdparty/elfutils.git/blame - NOTES
backends: Add initial return value location support for LoongArch
[thirdparty/elfutils.git] / NOTES
CommitLineData
1700fd25
MW
1Fundamental design decision:
2
3- the sizes of external and internal types are assumed to be the same.
4 This leaves byte ordering aside. While assuming this the code can be
5 greatly simplified and speed increases. Since no change violating this
6 assumption is in sight this is believed to be a worthwhile optimization.
7
8- the ABI of the backend modules is not guaranteed. Really, no guarantee
9 whatsoever. We are enforcing this in the code. The modules and their
10 users must match. No third-party EBL module are supported or allowed.
11 The only reason there are separate modules is to not have the code for
12 all architectures in all the binaries.
13
14- although the public libraries (libasm, libdw) have a stable API and are
15 backwards ABI compatible they, and the elfutils tools, do depend on each
16 others internals, and on internals of libelf to provide their interfaces.
17 So they should always be upgraded in lockstep when packaging the tools
18 and libraries separately. For one example of how to do that, see the
19 config/elfutils.spec.
20
21Some notes:
22
b08d5a8f
UD
23- old GNU ld's behavior wrt DSOs seems to be severely broken.
24
25 y.o reference foo()
26 y1.o defines foo(), references bar()
27 y2.o defines bar()
28 libbar.so defines bar()
29
30 Running
31
32 gcc -o y y.o -lbar y1.o y2.o
33
34 uses the bar() definition from libbar.so and does not mention the definition
35 in y2.o at all (no duplicate symbol message). Correct is to use the
36 definition in y2.o.
37
38
39 y.o reference foo()
40 y1.o defines foo(), references bar()
41 y2.o in liby2.a defines bar()
42 libbar.so defines bar()
43
44 Running
45
46 gcc -o y y.o -lbar y1.o -ly3
47
48 has to use the definition in -lbar and not pull the definition from liby3.a.
49
50
51- the old linker follows DT_NEEDED entries and adds the objects referenced
52 this way which define a symbol which is needed as a DT_NEEDED to the
53 generated binary. This is wrong since the DT_NEEDED changes the search
54 path in the object (which is breadth first).
55
56
57- the old linker supported extern "C++", extern "java" in version scripts.
98b69a97 58 I believe this implementation is severely broken and needs a redesign
b08d5a8f
UD
59 (how do wildcards work with these languages*?). Therefore it is left
60 out for now.
61
62
63- what should happen if two sections in different files with the same
64 name have different types and/or the flags are different
65
66
67- section names in input files are mostly irrelevant. Exceptions:
68
69 .comment/SHT_PROGBITS in strip, ld
70
71 .debug \
72 .line |
73 .debug_srcinfo |
74 .debug_sfnames |
75 .debug_aranges |
76 .debug_pubnames |
77 .debug_info |
78 .debug_abbrev |
79 .debug_line |
80 .debug_abbrev > DWARF sections in ld
81 .debug_line |
82 .debug_frame |
83 .debug_str |
84 .debug_loc |
85 .debug_macinfo |
86 .debug_weaknames |
87 .debug_funcnames |
88 .debug_typenames |
89 .debug_varnames /
90
91 Sections created in output files follow the naming of special section
92 from the gABI.
93
98b69a97 94 In no place is a section solely identified by its name. Internal
b08d5a8f 95 references always use the section index.