xref: /aosp_15_r20/external/elfutils/libelf/abstract.h (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
1*7304104dSAndroid Build Coastguard Worker /* Abstract description of component ELF types.
2*7304104dSAndroid Build Coastguard Worker    Copyright (C) 1998, 1999, 2000, 2002, 2004, 2007, 2015 Red Hat, Inc.
3*7304104dSAndroid Build Coastguard Worker    This file is part of elfutils.
4*7304104dSAndroid Build Coastguard Worker    Written by Ulrich Drepper <[email protected]>, 1998.
5*7304104dSAndroid Build Coastguard Worker 
6*7304104dSAndroid Build Coastguard Worker    This file is free software; you can redistribute it and/or modify
7*7304104dSAndroid Build Coastguard Worker    it under the terms of either
8*7304104dSAndroid Build Coastguard Worker 
9*7304104dSAndroid Build Coastguard Worker      * the GNU Lesser General Public License as published by the Free
10*7304104dSAndroid Build Coastguard Worker        Software Foundation; either version 3 of the License, or (at
11*7304104dSAndroid Build Coastguard Worker        your option) any later version
12*7304104dSAndroid Build Coastguard Worker 
13*7304104dSAndroid Build Coastguard Worker    or
14*7304104dSAndroid Build Coastguard Worker 
15*7304104dSAndroid Build Coastguard Worker      * the GNU General Public License as published by the Free
16*7304104dSAndroid Build Coastguard Worker        Software Foundation; either version 2 of the License, or (at
17*7304104dSAndroid Build Coastguard Worker        your option) any later version
18*7304104dSAndroid Build Coastguard Worker 
19*7304104dSAndroid Build Coastguard Worker    or both in parallel, as here.
20*7304104dSAndroid Build Coastguard Worker 
21*7304104dSAndroid Build Coastguard Worker    elfutils is distributed in the hope that it will be useful, but
22*7304104dSAndroid Build Coastguard Worker    WITHOUT ANY WARRANTY; without even the implied warranty of
23*7304104dSAndroid Build Coastguard Worker    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24*7304104dSAndroid Build Coastguard Worker    General Public License for more details.
25*7304104dSAndroid Build Coastguard Worker 
26*7304104dSAndroid Build Coastguard Worker    You should have received copies of the GNU General Public License and
27*7304104dSAndroid Build Coastguard Worker    the GNU Lesser General Public License along with this program.  If
28*7304104dSAndroid Build Coastguard Worker    not, see <http://www.gnu.org/licenses/>.  */
29*7304104dSAndroid Build Coastguard Worker 
30*7304104dSAndroid Build Coastguard Worker /* ELF header.  */
31*7304104dSAndroid Build Coastguard Worker #define Ehdr(Bits, Ext) \
32*7304104dSAndroid Build Coastguard Worker START (Bits, Ehdr, Ext##Ehdr)						      \
33*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (unsigned char e_ident[EI_NIDENT];)			      \
34*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (memmove (tdest->e_ident, tsrc->e_ident, EI_NIDENT);)	      \
35*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_type)				      \
36*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_machine)				      \
37*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), e_version)				      \
38*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Addr), e_entry)				      \
39*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Off), e_phoff)				      \
40*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Off), e_shoff)				      \
41*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), e_flags)				      \
42*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_ehsize)				      \
43*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_phentsize)			      \
44*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_phnum)				      \
45*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_shentsize)			      \
46*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_shnum)				      \
47*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), e_shstrndx)			      \
48*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Ehdr)
49*7304104dSAndroid Build Coastguard Worker 
50*7304104dSAndroid Build Coastguard Worker #define Ehdr32(Ext) \
51*7304104dSAndroid Build Coastguard Worker   Ehdr(32, Ext)
52*7304104dSAndroid Build Coastguard Worker #define Ehdr64(Ext) \
53*7304104dSAndroid Build Coastguard Worker   Ehdr(64, Ext)
54*7304104dSAndroid Build Coastguard Worker 
55*7304104dSAndroid Build Coastguard Worker 
56*7304104dSAndroid Build Coastguard Worker /* Program header.  */
57*7304104dSAndroid Build Coastguard Worker #define Phdr32(Ext) \
58*7304104dSAndroid Build Coastguard Worker START (32, Phdr, Ext##Phdr)						      \
59*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), p_type)				      \
60*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Off), p_offset)				      \
61*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Addr), p_vaddr)				      \
62*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Addr), p_paddr)				      \
63*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), p_filesz)				      \
64*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), p_memsz)				      \
65*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), p_flags)				      \
66*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), p_align)				      \
67*7304104dSAndroid Build Coastguard Worker END (32, Ext##Phdr)
68*7304104dSAndroid Build Coastguard Worker #define Phdr64(Ext) \
69*7304104dSAndroid Build Coastguard Worker START (64, Phdr, Ext##Phdr)						      \
70*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), p_type)				      \
71*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), p_flags)				      \
72*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Off), p_offset)				      \
73*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Addr), p_vaddr)				      \
74*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Addr), p_paddr)				      \
75*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), p_filesz)				      \
76*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), p_memsz)				      \
77*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), p_align)				      \
78*7304104dSAndroid Build Coastguard Worker END (64, Ext##Phdr)
79*7304104dSAndroid Build Coastguard Worker 
80*7304104dSAndroid Build Coastguard Worker 
81*7304104dSAndroid Build Coastguard Worker /* Section header.  */
82*7304104dSAndroid Build Coastguard Worker #define Shdr32(Ext) \
83*7304104dSAndroid Build Coastguard Worker START (32, Shdr, Ext##Shdr)						      \
84*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_name)				      \
85*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_type)				      \
86*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_flags)				      \
87*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Addr), sh_addr)				      \
88*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Off), sh_offset)				      \
89*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_size)				      \
90*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_link)				      \
91*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_info)				      \
92*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_addralign)			      \
93*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), sh_entsize)				      \
94*7304104dSAndroid Build Coastguard Worker END (32, Ext##Shdr)
95*7304104dSAndroid Build Coastguard Worker #define Shdr64(Ext) \
96*7304104dSAndroid Build Coastguard Worker START (64, Shdr, Ext##Shdr)						      \
97*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), sh_name)				      \
98*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), sh_type)				      \
99*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), sh_flags)				      \
100*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Addr), sh_addr)				      \
101*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Off), sh_offset)				      \
102*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), sh_size)				      \
103*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), sh_link)				      \
104*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), sh_info)				      \
105*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), sh_addralign)			      \
106*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), sh_entsize)				      \
107*7304104dSAndroid Build Coastguard Worker END (64, Ext##Shdr)
108*7304104dSAndroid Build Coastguard Worker 
109*7304104dSAndroid Build Coastguard Worker 
110*7304104dSAndroid Build Coastguard Worker /* Symbol table.  */
111*7304104dSAndroid Build Coastguard Worker #define Sym32(Ext) \
112*7304104dSAndroid Build Coastguard Worker START (32, Sym, Ext##Sym)						      \
113*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), st_name)				      \
114*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Addr), st_value)				      \
115*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), st_size)				      \
116*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (unsigned char st_info;)					      \
117*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (tdest->st_info = tsrc->st_info;)				      \
118*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (unsigned char st_other;)					      \
119*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (tdest->st_other = tsrc->st_other;)			      \
120*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Half), st_shndx)				      \
121*7304104dSAndroid Build Coastguard Worker END (32, Ext##Sym)
122*7304104dSAndroid Build Coastguard Worker #define Sym64(Ext) \
123*7304104dSAndroid Build Coastguard Worker START (64, Sym, Ext##Sym)						      \
124*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), st_name)				      \
125*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (unsigned char st_info;)					      \
126*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (tdest->st_info = tsrc->st_info;)				      \
127*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (unsigned char st_other;)					      \
128*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (tdest->st_other = tsrc->st_other;)			      \
129*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Half), st_shndx)				      \
130*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Addr), st_value)				      \
131*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), st_size)				      \
132*7304104dSAndroid Build Coastguard Worker END (64, Ext##Sym)
133*7304104dSAndroid Build Coastguard Worker 
134*7304104dSAndroid Build Coastguard Worker 
135*7304104dSAndroid Build Coastguard Worker /* Relocation.  */
136*7304104dSAndroid Build Coastguard Worker #define Rel32(Ext) \
137*7304104dSAndroid Build Coastguard Worker START (32, Rel, Ext##Rel)						      \
138*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Addr), r_offset)				      \
139*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), r_info)				      \
140*7304104dSAndroid Build Coastguard Worker END (32, Ext##Rel)
141*7304104dSAndroid Build Coastguard Worker #define Rel64(Ext) \
142*7304104dSAndroid Build Coastguard Worker START (64, Rel, Ext##Rel)						      \
143*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Addr), r_offset)				      \
144*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), r_info)				      \
145*7304104dSAndroid Build Coastguard Worker END (64, Ext##Rel)
146*7304104dSAndroid Build Coastguard Worker 
147*7304104dSAndroid Build Coastguard Worker #define Rela32(Ext) \
148*7304104dSAndroid Build Coastguard Worker START (32, Rela, Ext##Rela)						      \
149*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Addr), r_offset)				      \
150*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), r_info)				      \
151*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Sword), r_addend)				      \
152*7304104dSAndroid Build Coastguard Worker END (32, Ext##Rela)
153*7304104dSAndroid Build Coastguard Worker #define Rela64(Ext) \
154*7304104dSAndroid Build Coastguard Worker START (64, Rela, Ext##Rela)						      \
155*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Addr), r_offset)				      \
156*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), r_info)				      \
157*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Sxword), r_addend)				      \
158*7304104dSAndroid Build Coastguard Worker END (64, Ext##Rela)
159*7304104dSAndroid Build Coastguard Worker 
160*7304104dSAndroid Build Coastguard Worker 
161*7304104dSAndroid Build Coastguard Worker /* Note entry header.  */
162*7304104dSAndroid Build Coastguard Worker #define Note(Bits, Ext) \
163*7304104dSAndroid Build Coastguard Worker START (Bits, Nhdr, Ext##Nhdr)						      \
164*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), n_namesz)				      \
165*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), n_descsz)				      \
166*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), n_type)				      \
167*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Nhdr)
168*7304104dSAndroid Build Coastguard Worker 
169*7304104dSAndroid Build Coastguard Worker #define Note32(Ext) \
170*7304104dSAndroid Build Coastguard Worker   Note (32, Ext)
171*7304104dSAndroid Build Coastguard Worker #define Note64(Ext) \
172*7304104dSAndroid Build Coastguard Worker   Note (64, Ext)
173*7304104dSAndroid Build Coastguard Worker 
174*7304104dSAndroid Build Coastguard Worker 
175*7304104dSAndroid Build Coastguard Worker /* Dynamic section data.  */
176*7304104dSAndroid Build Coastguard Worker #define Dyn32(Ext) \
177*7304104dSAndroid Build Coastguard Worker START (32, Dyn, Ext##Dyn)						      \
178*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Sword), d_tag)				      \
179*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (union {)							      \
180*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(32, Ext##Word) d_val;)				      \
181*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(32, Ext##Addr) d_ptr;)				      \
182*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (Elf32_cvt_Addr1 (&tdest->d_un.d_val, &tsrc->d_un.d_val);)	      \
183*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(32, Ext##Off) d_off;)				      \
184*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (} d_un;)							      \
185*7304104dSAndroid Build Coastguard Worker END (32, Ext##Dyn)
186*7304104dSAndroid Build Coastguard Worker #define Dyn64(Ext) \
187*7304104dSAndroid Build Coastguard Worker START (64, Dyn, Ext##Dyn)						      \
188*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), d_tag)				      \
189*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (union {)							      \
190*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(64, Ext##Xword) d_val;)				      \
191*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(64, Ext##Addr) d_ptr;)				      \
192*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (Elf64_cvt_Addr1 (&tdest->d_un.d_val, &tsrc->d_un.d_val);)	      \
193*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (} d_un;)							      \
194*7304104dSAndroid Build Coastguard Worker END (64, Ext##Dyn)
195*7304104dSAndroid Build Coastguard Worker 
196*7304104dSAndroid Build Coastguard Worker 
197*7304104dSAndroid Build Coastguard Worker #ifndef GENERATE_CONVERSION
198*7304104dSAndroid Build Coastguard Worker /* Version definitions.  */
199*7304104dSAndroid Build Coastguard Worker # define Verdef(Bits, Ext) \
200*7304104dSAndroid Build Coastguard Worker START (Bits, Verdef, Ext##Verdef)					      \
201*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vd_version)			      \
202*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vd_flags)				      \
203*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vd_ndx)				      \
204*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vd_cnt)				      \
205*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vd_hash)				      \
206*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vd_aux)				      \
207*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vd_next)				      \
208*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Verdef)
209*7304104dSAndroid Build Coastguard Worker 
210*7304104dSAndroid Build Coastguard Worker # define Verdef32(Ext) \
211*7304104dSAndroid Build Coastguard Worker   Verdef (32, Ext)
212*7304104dSAndroid Build Coastguard Worker # define Verdef64(Ext) \
213*7304104dSAndroid Build Coastguard Worker   Verdef (64, Ext)
214*7304104dSAndroid Build Coastguard Worker 
215*7304104dSAndroid Build Coastguard Worker # define Verdaux(Bits, Ext) \
216*7304104dSAndroid Build Coastguard Worker START (Bits, Verdaux, Ext##Verdaux)					      \
217*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vda_name)				      \
218*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vda_next)				      \
219*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Verdaux)
220*7304104dSAndroid Build Coastguard Worker 
221*7304104dSAndroid Build Coastguard Worker # define Verdaux32(Ext) \
222*7304104dSAndroid Build Coastguard Worker   Verdaux (32, Ext)
223*7304104dSAndroid Build Coastguard Worker # define Verdaux64(Ext) \
224*7304104dSAndroid Build Coastguard Worker   Verdaux (64, Ext)
225*7304104dSAndroid Build Coastguard Worker 
226*7304104dSAndroid Build Coastguard Worker /* Required versions.  */
227*7304104dSAndroid Build Coastguard Worker # define Verneed(Bits, Ext) \
228*7304104dSAndroid Build Coastguard Worker START (Bits, Verneed, Ext##Verneed)					      \
229*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vn_version)			      \
230*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vn_cnt)				      \
231*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vn_file)				      \
232*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vn_aux)				      \
233*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vn_next)				      \
234*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Verneed)
235*7304104dSAndroid Build Coastguard Worker 
236*7304104dSAndroid Build Coastguard Worker # define Verneed32(Ext) \
237*7304104dSAndroid Build Coastguard Worker   Verneed (32, Ext)
238*7304104dSAndroid Build Coastguard Worker # define Verneed64(Ext) \
239*7304104dSAndroid Build Coastguard Worker   Verneed (64, Ext)
240*7304104dSAndroid Build Coastguard Worker 
241*7304104dSAndroid Build Coastguard Worker # define Vernaux(Bits, Ext) \
242*7304104dSAndroid Build Coastguard Worker START (Bits, Vernaux, Ext##Vernaux)					      \
243*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vna_hash)				      \
244*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vna_flags)				      \
245*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), vna_other)				      \
246*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vna_name)				      \
247*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), vna_next)				      \
248*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Vernaux)
249*7304104dSAndroid Build Coastguard Worker 
250*7304104dSAndroid Build Coastguard Worker # define Vernaux32(Ext) \
251*7304104dSAndroid Build Coastguard Worker   Vernaux (32, Ext)
252*7304104dSAndroid Build Coastguard Worker # define Vernaux64(Ext) \
253*7304104dSAndroid Build Coastguard Worker   Vernaux (64, Ext)
254*7304104dSAndroid Build Coastguard Worker #endif
255*7304104dSAndroid Build Coastguard Worker 
256*7304104dSAndroid Build Coastguard Worker /* Symbol information.  */
257*7304104dSAndroid Build Coastguard Worker #define Syminfo(Bits, Ext) \
258*7304104dSAndroid Build Coastguard Worker START (Bits, Syminfo, Ext##Syminfo)					      \
259*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), si_boundto)			      \
260*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), si_flags)				      \
261*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Syminfo)
262*7304104dSAndroid Build Coastguard Worker 
263*7304104dSAndroid Build Coastguard Worker #define Syminfo32(Ext) \
264*7304104dSAndroid Build Coastguard Worker   Syminfo (32, Ext)
265*7304104dSAndroid Build Coastguard Worker #define Syminfo64(Ext) \
266*7304104dSAndroid Build Coastguard Worker   Syminfo (64, Ext)
267*7304104dSAndroid Build Coastguard Worker 
268*7304104dSAndroid Build Coastguard Worker /* Move information.  */
269*7304104dSAndroid Build Coastguard Worker #define Move(Bits, Ext) \
270*7304104dSAndroid Build Coastguard Worker START (Bits, Move, Ext##Move)						      \
271*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Xword), m_value)				      \
272*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Xword), m_info)				      \
273*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Xword), m_poffset)			      \
274*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), m_repeat)				      \
275*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Half), m_stride)				      \
276*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Move)
277*7304104dSAndroid Build Coastguard Worker 
278*7304104dSAndroid Build Coastguard Worker #define Move32(Ext) \
279*7304104dSAndroid Build Coastguard Worker   Move (32, Ext)
280*7304104dSAndroid Build Coastguard Worker #define Move64(Ext) \
281*7304104dSAndroid Build Coastguard Worker   Move (64, Ext)
282*7304104dSAndroid Build Coastguard Worker 
283*7304104dSAndroid Build Coastguard Worker #define Lib(Bits, Ext) \
284*7304104dSAndroid Build Coastguard Worker START (Bits, Lib, Ext##Lib)						      \
285*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), l_name)				      \
286*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), l_time_stamp)			      \
287*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), l_checksum)			      \
288*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), l_version)				      \
289*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(Bits, Ext##Word), l_flags)				      \
290*7304104dSAndroid Build Coastguard Worker END (Bits, Ext##Lib)
291*7304104dSAndroid Build Coastguard Worker 
292*7304104dSAndroid Build Coastguard Worker #define Lib32(Ext) \
293*7304104dSAndroid Build Coastguard Worker   Lib (32, Ext)
294*7304104dSAndroid Build Coastguard Worker #define Lib64(Ext) \
295*7304104dSAndroid Build Coastguard Worker   Lib (64, Ext)
296*7304104dSAndroid Build Coastguard Worker 
297*7304104dSAndroid Build Coastguard Worker #define auxv_t32(Ext) \
298*7304104dSAndroid Build Coastguard Worker START (32, auxv_t, Ext##auxv_t)						      \
299*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), a_type)				      \
300*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (union {)							      \
301*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(32, Ext##Word) a_val;)				      \
302*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (Elf32_cvt_Addr1 (&tdest->a_un.a_val, &tsrc->a_un.a_val);)	      \
303*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (} a_un;)							      \
304*7304104dSAndroid Build Coastguard Worker END (32, Ext##auxv_t)
305*7304104dSAndroid Build Coastguard Worker #define auxv_t64(Ext) \
306*7304104dSAndroid Build Coastguard Worker START (64, auxv_t, Ext##auxv_t)						      \
307*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), a_type)				      \
308*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (union {)							      \
309*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (ElfW2(64, Ext##Xword) a_val;)				      \
310*7304104dSAndroid Build Coastguard Worker   TYPE_XLATE (Elf64_cvt_Addr1 (&tdest->a_un.a_val, &tsrc->a_un.a_val);)	      \
311*7304104dSAndroid Build Coastguard Worker   TYPE_EXTRA (} a_un;)							      \
312*7304104dSAndroid Build Coastguard Worker END (64, Ext##auxv_t)
313*7304104dSAndroid Build Coastguard Worker 
314*7304104dSAndroid Build Coastguard Worker /* Note that there is actual compression data right after the Chdr.
315*7304104dSAndroid Build Coastguard Worker    So we also have a separate conversion function for the whole
316*7304104dSAndroid Build Coastguard Worker    section.  */
317*7304104dSAndroid Build Coastguard Worker #define Chdr32(Ext) \
318*7304104dSAndroid Build Coastguard Worker START (32, Chdr, Ext##Chdr)						\
319*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), ch_type)				\
320*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), ch_size)				\
321*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(32, Ext##Word), ch_addralign)			\
322*7304104dSAndroid Build Coastguard Worker END (32, Ext##Chdr)
323*7304104dSAndroid Build Coastguard Worker 
324*7304104dSAndroid Build Coastguard Worker #define Chdr64(Ext) \
325*7304104dSAndroid Build Coastguard Worker START (64, Chdr, Ext##Chdr)						\
326*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), ch_type)				\
327*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Word), ch_reserved)				\
328*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), ch_size)				\
329*7304104dSAndroid Build Coastguard Worker   TYPE_NAME (ElfW2(64, Ext##Xword), ch_addralign)			\
330*7304104dSAndroid Build Coastguard Worker END (64, Ext##Chdr)
331