Line data Source code
1 : #ifndef DYNAMIC_TAG
2 : #error "DYNAMIC_TAG must be defined"
3 : #endif
4 :
5 : // Add separate macros for the architecture specific tags and the markers
6 : // such as DT_HIOS, etc. to allow using this file to in other contexts.
7 : // For example we can use it to generate a stringification switch statement.
8 :
9 : #ifndef HEXAGON_DYNAMIC_TAG
10 : #define HEXAGON_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
11 : #define HEXAGON_DYNAMIC_TAG_DEFINED
12 : #endif
13 :
14 : #ifndef MIPS_DYNAMIC_TAG
15 : #define MIPS_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
16 : #define MIPS_DYNAMIC_TAG_DEFINED
17 : #endif
18 :
19 : #ifndef PPC64_DYNAMIC_TAG
20 : #define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
21 : #define PPC64_DYNAMIC_TAG_DEFINED
22 : #endif
23 :
24 : #ifndef DYNAMIC_TAG_MARKER
25 : #define DYNAMIC_TAG_MARKER(name, value) DYNAMIC_TAG(name, value)
26 : #define DYNAMIC_TAG_MARKER_DEFINED
27 : #endif
28 :
29 : DYNAMIC_TAG(NULL, 0) // Marks end of dynamic array.
30 86 : DYNAMIC_TAG(NEEDED, 1) // String table offset of needed library.
31 30 : DYNAMIC_TAG(PLTRELSZ, 2) // Size of relocation entries in PLT.
32 43 : DYNAMIC_TAG(PLTGOT, 3) // Address associated with linkage table.
33 101 : DYNAMIC_TAG(HASH, 4) // Address of symbolic hash table.
34 107 : DYNAMIC_TAG(STRTAB, 5) // Address of dynamic string table.
35 108 : DYNAMIC_TAG(SYMTAB, 6) // Address of dynamic symbol table.
36 19 : DYNAMIC_TAG(RELA, 7) // Address of relocation table (Rela entries).
37 19 : DYNAMIC_TAG(RELASZ, 8) // Size of Rela relocation table.
38 20 : DYNAMIC_TAG(RELAENT, 9) // Size of a Rela relocation entry.
39 107 : DYNAMIC_TAG(STRSZ, 10) // Total size of the string table.
40 108 : DYNAMIC_TAG(SYMENT, 11) // Size of a symbol table entry.
41 14 : DYNAMIC_TAG(INIT, 12) // Address of initialization function.
42 14 : DYNAMIC_TAG(FINI, 13) // Address of termination function.
43 5 : DYNAMIC_TAG(SONAME, 14) // String table offset of a shared objects name.
44 2 : DYNAMIC_TAG(RPATH, 15) // String table offset of library search path.
45 0 : DYNAMIC_TAG(SYMBOLIC, 16) // Changes symbol resolution algorithm.
46 15 : DYNAMIC_TAG(REL, 17) // Address of relocation table (Rel entries).
47 15 : DYNAMIC_TAG(RELSZ, 18) // Size of Rel relocation table.
48 16 : DYNAMIC_TAG(RELENT, 19) // Size of a Rel relocation entry.
49 30 : DYNAMIC_TAG(PLTREL, 20) // Type of relocation entry used for linking.
50 60 : DYNAMIC_TAG(DEBUG, 21) // Reserved for debugger.
51 4 : DYNAMIC_TAG(TEXTREL, 22) // Relocations exist for non-writable segments.
52 30 : DYNAMIC_TAG(JMPREL, 23) // Address of relocations associated with PLT.
53 0 : DYNAMIC_TAG(BIND_NOW, 24) // Process all relocations before execution.
54 10 : DYNAMIC_TAG(INIT_ARRAY, 25) // Pointer to array of initialization functions.
55 10 : DYNAMIC_TAG(FINI_ARRAY, 26) // Pointer to array of termination functions.
56 10 : DYNAMIC_TAG(INIT_ARRAYSZ, 27) // Size of DT_INIT_ARRAY.
57 10 : DYNAMIC_TAG(FINI_ARRAYSZ, 28) // Size of DT_FINI_ARRAY.
58 5 : DYNAMIC_TAG(RUNPATH, 29) // String table offset of lib search path.
59 7 : DYNAMIC_TAG(FLAGS, 30) // Flags.
60 : DYNAMIC_TAG_MARKER(ENCODING, 32) // Values from here to DT_LOOS follow the rules
61 : // for the interpretation of the d_un union.
62 :
63 2 : DYNAMIC_TAG(PREINIT_ARRAY, 32) // Pointer to array of preinit functions.
64 2 : DYNAMIC_TAG(PREINIT_ARRAYSZ, 33) // Size of the DT_PREINIT_ARRAY array.
65 :
66 0 : DYNAMIC_TAG(SYMTAB_SHNDX, 34) // Address of the SHT_SYMTAB_SHNDX section.
67 :
68 : // Experimental support for SHT_RELR sections. For details, see proposal
69 : // at https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg
70 6 : DYNAMIC_TAG(RELRSZ, 35) // Size of Relr relocation table.
71 6 : DYNAMIC_TAG(RELR, 36) // Address of relocation table (Relr entries).
72 6 : DYNAMIC_TAG(RELRENT, 37) // Size of a Relr relocation entry.
73 :
74 : DYNAMIC_TAG_MARKER(LOOS, 0x60000000) // Start of environment specific tags.
75 : DYNAMIC_TAG_MARKER(HIOS, 0x6FFFFFFF) // End of environment specific tags.
76 : DYNAMIC_TAG_MARKER(LOPROC, 0x70000000) // Start of processor specific tags.
77 : DYNAMIC_TAG_MARKER(HIPROC, 0x7FFFFFFF) // End of processor specific tags.
78 :
79 : // Android packed relocation section tags.
80 : // https://android.googlesource.com/platform/bionic/+/6f12bfece5dcc01325e0abba56a46b1bcf991c69/tools/relocation_packer/src/elf_file.cc#31
81 1 : DYNAMIC_TAG(ANDROID_REL, 0x6000000F)
82 1 : DYNAMIC_TAG(ANDROID_RELSZ, 0x60000010)
83 1 : DYNAMIC_TAG(ANDROID_RELA, 0x60000011)
84 1 : DYNAMIC_TAG(ANDROID_RELASZ, 0x60000012)
85 :
86 : // Android's experimental support for SHT_RELR sections.
87 : // https://android.googlesource.com/platform/bionic/+/b7feec74547f84559a1467aca02708ff61346d2a/libc/include/elf.h#253
88 0 : DYNAMIC_TAG(ANDROID_RELR, 0x6FFFE000) // Address of relocation table (Relr entries).
89 0 : DYNAMIC_TAG(ANDROID_RELRSZ, 0x6FFFE001) // Size of Relr relocation table.
90 0 : DYNAMIC_TAG(ANDROID_RELRENT, 0x6FFFE003) // Size of a Relr relocation entry.
91 :
92 72 : DYNAMIC_TAG(GNU_HASH, 0x6FFFFEF5) // Reference to the GNU hash table.
93 1 : DYNAMIC_TAG(TLSDESC_PLT, 0x6FFFFEF6) // Location of PLT entry for TLS
94 : // descriptor resolver calls.
95 1 : DYNAMIC_TAG(TLSDESC_GOT, 0x6FFFFEF7) // Location of GOT entry used by TLS
96 : // descriptor resolver PLT entry.
97 13 : DYNAMIC_TAG(RELACOUNT, 0x6FFFFFF9) // ELF32_Rela count.
98 4 : DYNAMIC_TAG(RELCOUNT, 0x6FFFFFFA) // ELF32_Rel count.
99 :
100 5 : DYNAMIC_TAG(FLAGS_1, 0X6FFFFFFB) // Flags_1.
101 :
102 13 : DYNAMIC_TAG(VERSYM, 0x6FFFFFF0) // The address of .gnu.version section.
103 1 : DYNAMIC_TAG(VERDEF, 0X6FFFFFFC) // The address of the version definition
104 : // table.
105 1 : DYNAMIC_TAG(VERDEFNUM, 0X6FFFFFFD) // The number of entries in DT_VERDEF.
106 12 : DYNAMIC_TAG(VERNEED, 0X6FFFFFFE) // The address of the version dependency
107 : // table.
108 12 : DYNAMIC_TAG(VERNEEDNUM, 0X6FFFFFFF) // The number of entries in DT_VERNEED.
109 :
110 : // Hexagon specific dynamic table entries
111 : HEXAGON_DYNAMIC_TAG(HEXAGON_SYMSZ, 0x70000000)
112 0 : HEXAGON_DYNAMIC_TAG(HEXAGON_VER, 0x70000001)
113 0 : HEXAGON_DYNAMIC_TAG(HEXAGON_PLT, 0x70000002)
114 :
115 : // Mips specific dynamic table entry tags.
116 :
117 : MIPS_DYNAMIC_TAG(MIPS_RLD_VERSION, 0x70000001) // 32 bit version number for
118 : // runtime linker interface.
119 0 : MIPS_DYNAMIC_TAG(MIPS_TIME_STAMP, 0x70000002) // Time stamp.
120 0 : MIPS_DYNAMIC_TAG(MIPS_ICHECKSUM, 0x70000003) // Checksum of external strings
121 : // and common sizes.
122 0 : MIPS_DYNAMIC_TAG(MIPS_IVERSION, 0x70000004) // Index of version string
123 : // in string table.
124 15 : MIPS_DYNAMIC_TAG(MIPS_FLAGS, 0x70000005) // 32 bits of flags.
125 15 : MIPS_DYNAMIC_TAG(MIPS_BASE_ADDRESS, 0x70000006) // Base address of the segment.
126 0 : MIPS_DYNAMIC_TAG(MIPS_MSYM, 0x70000007) // Address of .msym section.
127 0 : MIPS_DYNAMIC_TAG(MIPS_CONFLICT, 0x70000008) // Address of .conflict section.
128 0 : MIPS_DYNAMIC_TAG(MIPS_LIBLIST, 0x70000009) // Address of .liblist section.
129 15 : MIPS_DYNAMIC_TAG(MIPS_LOCAL_GOTNO, 0x7000000a) // Number of local global offset
130 : // table entries.
131 0 : MIPS_DYNAMIC_TAG(MIPS_CONFLICTNO, 0x7000000b) // Number of entries
132 : // in the .conflict section.
133 0 : MIPS_DYNAMIC_TAG(MIPS_LIBLISTNO, 0x70000010) // Number of entries
134 : // in the .liblist section.
135 15 : MIPS_DYNAMIC_TAG(MIPS_SYMTABNO, 0x70000011) // Number of entries
136 : // in the .dynsym section.
137 3 : MIPS_DYNAMIC_TAG(MIPS_UNREFEXTNO, 0x70000012) // Index of first external dynamic
138 : // symbol not referenced locally.
139 15 : MIPS_DYNAMIC_TAG(MIPS_GOTSYM, 0x70000013) // Index of first dynamic symbol
140 : // in global offset table.
141 0 : MIPS_DYNAMIC_TAG(MIPS_HIPAGENO, 0x70000014) // Number of page table entries
142 : // in global offset table.
143 4 : MIPS_DYNAMIC_TAG(MIPS_RLD_MAP, 0x70000016) // Address of run time loader map
144 : // used for debugging.
145 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_CLASS, 0x70000017) // Delta C++ class definition.
146 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_CLASS_NO, 0x70000018) // Number of entries
147 : // in DT_MIPS_DELTA_CLASS.
148 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_INSTANCE, 0x70000019) // Delta C++ class instances.
149 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_INSTANCE_NO, 0x7000001A) // Number of entries
150 : // in DT_MIPS_DELTA_INSTANCE.
151 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_RELOC, 0x7000001B) // Delta relocations.
152 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_RELOC_NO, 0x7000001C) // Number of entries
153 : // in DT_MIPS_DELTA_RELOC.
154 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_SYM, 0x7000001D) // Delta symbols that Delta
155 : // relocations refer to.
156 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_SYM_NO, 0x7000001E) // Number of entries
157 : // in DT_MIPS_DELTA_SYM.
158 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_CLASSSYM, 0x70000020) // Delta symbols that hold
159 : // class declarations.
160 0 : MIPS_DYNAMIC_TAG(MIPS_DELTA_CLASSSYM_NO, 0x70000021) // Number of entries
161 : // in DT_MIPS_DELTA_CLASSSYM.
162 :
163 0 : MIPS_DYNAMIC_TAG(MIPS_CXX_FLAGS, 0x70000022) // Flags indicating information
164 : // about C++ flavor.
165 0 : MIPS_DYNAMIC_TAG(MIPS_PIXIE_INIT, 0x70000023) // Pixie information.
166 0 : MIPS_DYNAMIC_TAG(MIPS_SYMBOL_LIB, 0x70000024) // Address of .MIPS.symlib
167 0 : MIPS_DYNAMIC_TAG(MIPS_LOCALPAGE_GOTIDX, 0x70000025) // The GOT index of the first PTE
168 : // for a segment
169 0 : MIPS_DYNAMIC_TAG(MIPS_LOCAL_GOTIDX, 0x70000026) // The GOT index of the first PTE
170 : // for a local symbol
171 0 : MIPS_DYNAMIC_TAG(MIPS_HIDDEN_GOTIDX, 0x70000027) // The GOT index of the first PTE
172 : // for a hidden symbol
173 0 : MIPS_DYNAMIC_TAG(MIPS_PROTECTED_GOTIDX, 0x70000028) // The GOT index of the first PTE
174 : // for a protected symbol
175 1 : MIPS_DYNAMIC_TAG(MIPS_OPTIONS, 0x70000029) // Address of `.MIPS.options'.
176 0 : MIPS_DYNAMIC_TAG(MIPS_INTERFACE, 0x7000002A) // Address of `.interface'.
177 0 : MIPS_DYNAMIC_TAG(MIPS_DYNSTR_ALIGN, 0x7000002B) // Unknown.
178 0 : MIPS_DYNAMIC_TAG(MIPS_INTERFACE_SIZE, 0x7000002C) // Size of the .interface section.
179 0 : MIPS_DYNAMIC_TAG(MIPS_RLD_TEXT_RESOLVE_ADDR, 0x7000002D) // Size of rld_text_resolve
180 : // function stored in the GOT.
181 0 : MIPS_DYNAMIC_TAG(MIPS_PERF_SUFFIX, 0x7000002E) // Default suffix of DSO to be added
182 : // by rld on dlopen() calls.
183 0 : MIPS_DYNAMIC_TAG(MIPS_COMPACT_SIZE, 0x7000002F) // Size of compact relocation
184 : // section (O32).
185 0 : MIPS_DYNAMIC_TAG(MIPS_GP_VALUE, 0x70000030) // GP value for auxiliary GOTs.
186 0 : MIPS_DYNAMIC_TAG(MIPS_AUX_DYNAMIC, 0x70000031) // Address of auxiliary .dynamic.
187 2 : MIPS_DYNAMIC_TAG(MIPS_PLTGOT, 0x70000032) // Address of the base of the PLTGOT.
188 0 : MIPS_DYNAMIC_TAG(MIPS_RWPLT, 0x70000034) // Points to the base
189 : // of a writable PLT.
190 5 : MIPS_DYNAMIC_TAG(MIPS_RLD_MAP_REL, 0x70000035) // Relative offset of run time loader
191 : // map, used for debugging.
192 :
193 : // PPC64 specific dynamic table entries.
194 : PPC64_DYNAMIC_TAG(PPC64_GLINK, 0x70000000) // Address of 32 bytes before the
195 : // first glink lazy resolver stub.
196 :
197 : // Sun machine-independent extensions.
198 5 : DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
199 7 : DYNAMIC_TAG(FILTER, 0x7FFFFFFF) // Shared object to get values from
200 :
201 :
202 : #ifdef DYNAMIC_TAG_MARKER_DEFINED
203 : #undef DYNAMIC_TAG_MARKER
204 : #endif
205 : #ifdef MIPS_DYNAMIC_TAG_DEFINED
206 : #undef MIPS_DYNAMIC_TAG
207 : #undef MIPS_DYNAMIC_TAG_DEFINED
208 : #endif
209 : #ifdef HEXAGON_DYNAMIC_TAG_DEFINED
210 : #undef HEXAGON_DYNAMIC_TAG
211 : #undef HEXAGON_DYNAMIC_TAG_DEFINED
212 : #endif
213 : #ifdef PPC64_DYNAMIC_TAG_DEFINED
214 : #undef PPC64_DYNAMIC_TAG
215 : #undef PPC64_DYNAMIC_TAG_DEFINED
216 : #endif
|