xref: /aosp_15_r20/test/vts/vndk_utils/library/elf/structs.py (revision 9a74111979c139a065a9a7e4d45972320c5732c7)
1*9a741119SAndroid Build Coastguard Worker#
2*9a741119SAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project
3*9a741119SAndroid Build Coastguard Worker#
4*9a741119SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*9a741119SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*9a741119SAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*9a741119SAndroid Build Coastguard Worker#
8*9a741119SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*9a741119SAndroid Build Coastguard Worker#
10*9a741119SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*9a741119SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*9a741119SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*9a741119SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*9a741119SAndroid Build Coastguard Worker# limitations under the License.
15*9a741119SAndroid Build Coastguard Worker#
16*9a741119SAndroid Build Coastguard Worker"""This file contains ELF C structs and data types."""
17*9a741119SAndroid Build Coastguard Worker
18*9a741119SAndroid Build Coastguard Workerimport ctypes
19*9a741119SAndroid Build Coastguard Worker
20*9a741119SAndroid Build Coastguard Workerfrom vts.utils.python.library.elf import consts
21*9a741119SAndroid Build Coastguard Worker
22*9a741119SAndroid Build Coastguard Worker
23*9a741119SAndroid Build Coastguard Worker# ELF data types.
24*9a741119SAndroid Build Coastguard Worker
25*9a741119SAndroid Build Coastguard Worker
26*9a741119SAndroid Build Coastguard WorkerElf32_Addr = ctypes.c_uint32
27*9a741119SAndroid Build Coastguard WorkerElf32_Off = ctypes.c_uint32
28*9a741119SAndroid Build Coastguard WorkerElf32_Half = ctypes.c_uint16
29*9a741119SAndroid Build Coastguard WorkerElf32_Word = ctypes.c_uint32
30*9a741119SAndroid Build Coastguard WorkerElf32_Sword = ctypes.c_int32
31*9a741119SAndroid Build Coastguard Worker
32*9a741119SAndroid Build Coastguard WorkerElf64_Addr = ctypes.c_uint64
33*9a741119SAndroid Build Coastguard WorkerElf64_Off = ctypes.c_uint64
34*9a741119SAndroid Build Coastguard WorkerElf64_Half = ctypes.c_uint16
35*9a741119SAndroid Build Coastguard WorkerElf64_Word = ctypes.c_uint32
36*9a741119SAndroid Build Coastguard WorkerElf64_Sword = ctypes.c_int32
37*9a741119SAndroid Build Coastguard WorkerElf64_Xword = ctypes.c_uint64
38*9a741119SAndroid Build Coastguard WorkerElf64_Sxword = ctypes.c_int64
39*9a741119SAndroid Build Coastguard Worker
40*9a741119SAndroid Build Coastguard Worker
41*9a741119SAndroid Build Coastguard Worker# ELF C structs.
42*9a741119SAndroid Build Coastguard Worker
43*9a741119SAndroid Build Coastguard Worker
44*9a741119SAndroid Build Coastguard Workerclass CStructure(ctypes.LittleEndianStructure):
45*9a741119SAndroid Build Coastguard Worker    """Little endian C structure base class."""
46*9a741119SAndroid Build Coastguard Worker    pass
47*9a741119SAndroid Build Coastguard Worker
48*9a741119SAndroid Build Coastguard Worker
49*9a741119SAndroid Build Coastguard Workerclass CUnion(ctypes.Union):
50*9a741119SAndroid Build Coastguard Worker    """Native endian C union base class."""
51*9a741119SAndroid Build Coastguard Worker    pass
52*9a741119SAndroid Build Coastguard Worker
53*9a741119SAndroid Build Coastguard Worker
54*9a741119SAndroid Build Coastguard Workerclass _Ehdr(CStructure):
55*9a741119SAndroid Build Coastguard Worker    """ELF header base class."""
56*9a741119SAndroid Build Coastguard Worker
57*9a741119SAndroid Build Coastguard Worker    def GetFileClass(self):
58*9a741119SAndroid Build Coastguard Worker        """Returns the file class."""
59*9a741119SAndroid Build Coastguard Worker        return self.e_ident[consts.EI_CLASS]
60*9a741119SAndroid Build Coastguard Worker
61*9a741119SAndroid Build Coastguard Worker    def GetDataEncoding(self):
62*9a741119SAndroid Build Coastguard Worker        """Returns the data encoding of the file."""
63*9a741119SAndroid Build Coastguard Worker        return self.e_ident[consts.EI_DATA]
64*9a741119SAndroid Build Coastguard Worker
65*9a741119SAndroid Build Coastguard Worker
66*9a741119SAndroid Build Coastguard Workerclass Elf32_Ehdr(_Ehdr):
67*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit header."""
68*9a741119SAndroid Build Coastguard Worker    _fields_ = [('e_ident', ctypes.c_uint8 * consts.EI_NIDENT),
69*9a741119SAndroid Build Coastguard Worker                ('e_type', Elf32_Half),
70*9a741119SAndroid Build Coastguard Worker                ('e_machine', Elf32_Half),
71*9a741119SAndroid Build Coastguard Worker                ('e_version', Elf32_Word),
72*9a741119SAndroid Build Coastguard Worker                ('e_entry', Elf32_Addr),
73*9a741119SAndroid Build Coastguard Worker                ('e_phoff', Elf32_Off),
74*9a741119SAndroid Build Coastguard Worker                ('e_shoff', Elf32_Off),
75*9a741119SAndroid Build Coastguard Worker                ('e_flags', Elf32_Word),
76*9a741119SAndroid Build Coastguard Worker                ('e_ehsize', Elf32_Half),
77*9a741119SAndroid Build Coastguard Worker                ('e_phentsize', Elf32_Half),
78*9a741119SAndroid Build Coastguard Worker                ('e_phnum', Elf32_Half),
79*9a741119SAndroid Build Coastguard Worker                ('e_shentsize', Elf32_Half),
80*9a741119SAndroid Build Coastguard Worker                ('e_shnum', Elf32_Half),
81*9a741119SAndroid Build Coastguard Worker                ('e_shstrndx', Elf32_Half)]
82*9a741119SAndroid Build Coastguard Worker
83*9a741119SAndroid Build Coastguard Worker
84*9a741119SAndroid Build Coastguard Workerclass Elf64_Ehdr(_Ehdr):
85*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit header."""
86*9a741119SAndroid Build Coastguard Worker    _fields_ = [('e_ident', ctypes.c_uint8 * consts.EI_NIDENT),
87*9a741119SAndroid Build Coastguard Worker                ('e_type', Elf64_Half),
88*9a741119SAndroid Build Coastguard Worker                ('e_machine', Elf64_Half),
89*9a741119SAndroid Build Coastguard Worker                ('e_version', Elf64_Word),
90*9a741119SAndroid Build Coastguard Worker                ('e_entry', Elf64_Addr),
91*9a741119SAndroid Build Coastguard Worker                ('e_phoff', Elf64_Off),
92*9a741119SAndroid Build Coastguard Worker                ('e_shoff', Elf64_Off),
93*9a741119SAndroid Build Coastguard Worker                ('e_flags', Elf64_Word),
94*9a741119SAndroid Build Coastguard Worker                ('e_ehsize', Elf64_Half),
95*9a741119SAndroid Build Coastguard Worker                ('e_phentsize', Elf64_Half),
96*9a741119SAndroid Build Coastguard Worker                ('e_phnum', Elf64_Half),
97*9a741119SAndroid Build Coastguard Worker                ('e_shentsize', Elf64_Half),
98*9a741119SAndroid Build Coastguard Worker                ('e_shnum', Elf64_Half),
99*9a741119SAndroid Build Coastguard Worker                ('e_shstrndx', Elf64_Half)]
100*9a741119SAndroid Build Coastguard Worker
101*9a741119SAndroid Build Coastguard Worker
102*9a741119SAndroid Build Coastguard Workerclass Elf32_Shdr(CStructure):
103*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit section header."""
104*9a741119SAndroid Build Coastguard Worker    _fields_ = [('sh_name', Elf32_Word),
105*9a741119SAndroid Build Coastguard Worker                ('sh_type', Elf32_Word),
106*9a741119SAndroid Build Coastguard Worker                ('sh_flags', Elf32_Word),
107*9a741119SAndroid Build Coastguard Worker                ('sh_addr', Elf32_Addr),
108*9a741119SAndroid Build Coastguard Worker                ('sh_offset', Elf32_Off),
109*9a741119SAndroid Build Coastguard Worker                ('sh_size', Elf32_Word),
110*9a741119SAndroid Build Coastguard Worker                ('sh_link', Elf32_Word),
111*9a741119SAndroid Build Coastguard Worker                ('sh_info', Elf32_Word),
112*9a741119SAndroid Build Coastguard Worker                ('sh_addralign', Elf32_Word),
113*9a741119SAndroid Build Coastguard Worker                ('sh_entsize', Elf32_Word)]
114*9a741119SAndroid Build Coastguard Worker
115*9a741119SAndroid Build Coastguard Worker
116*9a741119SAndroid Build Coastguard Workerclass Elf64_Shdr(CStructure):
117*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit section header."""
118*9a741119SAndroid Build Coastguard Worker    _fields_ = [('sh_name', Elf64_Word),
119*9a741119SAndroid Build Coastguard Worker                ('sh_type', Elf64_Word),
120*9a741119SAndroid Build Coastguard Worker                ('sh_flags', Elf64_Xword),
121*9a741119SAndroid Build Coastguard Worker                ('sh_addr', Elf64_Addr),
122*9a741119SAndroid Build Coastguard Worker                ('sh_offset', Elf64_Off),
123*9a741119SAndroid Build Coastguard Worker                ('sh_size', Elf64_Xword),
124*9a741119SAndroid Build Coastguard Worker                ('sh_link', Elf64_Word),
125*9a741119SAndroid Build Coastguard Worker                ('sh_info', Elf64_Word),
126*9a741119SAndroid Build Coastguard Worker                ('sh_addralign', Elf64_Xword),
127*9a741119SAndroid Build Coastguard Worker                ('sh_entsize', Elf64_Xword)]
128*9a741119SAndroid Build Coastguard Worker
129*9a741119SAndroid Build Coastguard Worker
130*9a741119SAndroid Build Coastguard Workerclass Elf32_Dyn(CStructure):
131*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit dynamic section entry."""
132*9a741119SAndroid Build Coastguard Worker    class _Elf32_Dyn__d_un(CUnion):
133*9a741119SAndroid Build Coastguard Worker        _fields_ = [('d_val', Elf32_Word),
134*9a741119SAndroid Build Coastguard Worker                    ('d_ptr', Elf32_Addr)]
135*9a741119SAndroid Build Coastguard Worker    _fields_ = [('d_tag', Elf32_Sword),
136*9a741119SAndroid Build Coastguard Worker                ('d_un', _Elf32_Dyn__d_un)]
137*9a741119SAndroid Build Coastguard Worker
138*9a741119SAndroid Build Coastguard Worker
139*9a741119SAndroid Build Coastguard Workerclass Elf64_Dyn(CStructure):
140*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit dynamic section entry."""
141*9a741119SAndroid Build Coastguard Worker    class _Elf64_Dyn__d_un(CUnion):
142*9a741119SAndroid Build Coastguard Worker        _fields_ = [('d_val', Elf64_Xword),
143*9a741119SAndroid Build Coastguard Worker                    ('d_ptr', Elf64_Addr)]
144*9a741119SAndroid Build Coastguard Worker    _fields_ = [('d_tag', Elf64_Sxword),
145*9a741119SAndroid Build Coastguard Worker                ('d_un', _Elf64_Dyn__d_un)]
146*9a741119SAndroid Build Coastguard Worker
147*9a741119SAndroid Build Coastguard Worker
148*9a741119SAndroid Build Coastguard Workerclass _Sym(CStructure):
149*9a741119SAndroid Build Coastguard Worker    """ELF symbol table entry base class."""
150*9a741119SAndroid Build Coastguard Worker
151*9a741119SAndroid Build Coastguard Worker    def GetBinding(self):
152*9a741119SAndroid Build Coastguard Worker        """Returns the symbol binding."""
153*9a741119SAndroid Build Coastguard Worker        return self.st_info >> 4
154*9a741119SAndroid Build Coastguard Worker
155*9a741119SAndroid Build Coastguard Worker    def GetType(self):
156*9a741119SAndroid Build Coastguard Worker        """Returns the symbol type."""
157*9a741119SAndroid Build Coastguard Worker        return self.st_info & 0xf
158*9a741119SAndroid Build Coastguard Worker
159*9a741119SAndroid Build Coastguard Worker    def SetBinding(self, binding):
160*9a741119SAndroid Build Coastguard Worker        """Sets the symbol binding.
161*9a741119SAndroid Build Coastguard Worker
162*9a741119SAndroid Build Coastguard Worker        Args:
163*9a741119SAndroid Build Coastguard Worker            binding: An integer specifying the new binding.
164*9a741119SAndroid Build Coastguard Worker        """
165*9a741119SAndroid Build Coastguard Worker        self.SetSymbolAndType(binding, self.GetType())
166*9a741119SAndroid Build Coastguard Worker
167*9a741119SAndroid Build Coastguard Worker    def SetType(self, type_):
168*9a741119SAndroid Build Coastguard Worker        """Sets the symbol type.
169*9a741119SAndroid Build Coastguard Worker
170*9a741119SAndroid Build Coastguard Worker        Args:
171*9a741119SAndroid Build Coastguard Worker            type_: An integer specifying the new type.
172*9a741119SAndroid Build Coastguard Worker        """
173*9a741119SAndroid Build Coastguard Worker        self.SetSymbolAndType(self.GetBinding(), type_)
174*9a741119SAndroid Build Coastguard Worker
175*9a741119SAndroid Build Coastguard Worker    def SetBindingAndType(self, binding, type_):
176*9a741119SAndroid Build Coastguard Worker        """Sets the symbol binding and type.
177*9a741119SAndroid Build Coastguard Worker
178*9a741119SAndroid Build Coastguard Worker        Args:
179*9a741119SAndroid Build Coastguard Worker            binding: An integer specifying the new binding.
180*9a741119SAndroid Build Coastguard Worker            type_: An integer specifying the new type.
181*9a741119SAndroid Build Coastguard Worker        """
182*9a741119SAndroid Build Coastguard Worker        self.st_info = (binding << 4) | (type_ & 0xf)
183*9a741119SAndroid Build Coastguard Worker
184*9a741119SAndroid Build Coastguard Worker
185*9a741119SAndroid Build Coastguard Workerclass Elf32_Sym(_Sym):
186*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit symbol table entry."""
187*9a741119SAndroid Build Coastguard Worker    _fields_ = [('st_name', Elf32_Word),
188*9a741119SAndroid Build Coastguard Worker                ('st_value', Elf32_Addr),
189*9a741119SAndroid Build Coastguard Worker                ('st_size', Elf32_Word),
190*9a741119SAndroid Build Coastguard Worker                ('st_info', ctypes.c_uint8),
191*9a741119SAndroid Build Coastguard Worker                ('st_other', ctypes.c_uint8),
192*9a741119SAndroid Build Coastguard Worker                ('st_shndx', Elf32_Half)]
193*9a741119SAndroid Build Coastguard Worker
194*9a741119SAndroid Build Coastguard Worker
195*9a741119SAndroid Build Coastguard Workerclass Elf64_Sym(_Sym):
196*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit symbol table entry."""
197*9a741119SAndroid Build Coastguard Worker    _fields_ = [('st_name', Elf64_Word),
198*9a741119SAndroid Build Coastguard Worker                ('st_info', ctypes.c_uint8),
199*9a741119SAndroid Build Coastguard Worker                ('st_other', ctypes.c_uint8),
200*9a741119SAndroid Build Coastguard Worker                ('st_shndx', Elf64_Half),
201*9a741119SAndroid Build Coastguard Worker                ('st_value', Elf64_Addr),
202*9a741119SAndroid Build Coastguard Worker                ('st_size', Elf64_Xword)]
203*9a741119SAndroid Build Coastguard Worker
204*9a741119SAndroid Build Coastguard Worker
205*9a741119SAndroid Build Coastguard Workerclass _32_Rel(CStructure):
206*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit relocation table entry base class."""
207*9a741119SAndroid Build Coastguard Worker
208*9a741119SAndroid Build Coastguard Worker    def GetSymbol(self):
209*9a741119SAndroid Build Coastguard Worker        """Returns the symbol table index with respect to the relocation.
210*9a741119SAndroid Build Coastguard Worker
211*9a741119SAndroid Build Coastguard Worker        Symbol table index with respect to which the relocation must be made.
212*9a741119SAndroid Build Coastguard Worker        """
213*9a741119SAndroid Build Coastguard Worker        return self.r_info >> 8
214*9a741119SAndroid Build Coastguard Worker
215*9a741119SAndroid Build Coastguard Worker    def GetType(self):
216*9a741119SAndroid Build Coastguard Worker        """Returns the relocation type."""
217*9a741119SAndroid Build Coastguard Worker        return self.r_info & 0xff
218*9a741119SAndroid Build Coastguard Worker
219*9a741119SAndroid Build Coastguard Worker    def SetSymbol(self, symndx):
220*9a741119SAndroid Build Coastguard Worker        """Sets the relocation's symbol table index.
221*9a741119SAndroid Build Coastguard Worker
222*9a741119SAndroid Build Coastguard Worker        Args:
223*9a741119SAndroid Build Coastguard Worker            symndx: An integer specifying the new symbol table index.
224*9a741119SAndroid Build Coastguard Worker        """
225*9a741119SAndroid Build Coastguard Worker        self.SetSymbolAndType(symndx, self.GetType())
226*9a741119SAndroid Build Coastguard Worker
227*9a741119SAndroid Build Coastguard Worker    def SetType(self, type_):
228*9a741119SAndroid Build Coastguard Worker        """Sets the relocation type.
229*9a741119SAndroid Build Coastguard Worker
230*9a741119SAndroid Build Coastguard Worker        Args:
231*9a741119SAndroid Build Coastguard Worker            type_: An integer specifying the new relocation type.
232*9a741119SAndroid Build Coastguard Worker        """
233*9a741119SAndroid Build Coastguard Worker        self.SetSymbolAndType(self.GetSymbol(), type_)
234*9a741119SAndroid Build Coastguard Worker
235*9a741119SAndroid Build Coastguard Worker    def SetSymbolAndType(self, symndx, type_):
236*9a741119SAndroid Build Coastguard Worker        """Sets the relocation's symbol table index and type.
237*9a741119SAndroid Build Coastguard Worker
238*9a741119SAndroid Build Coastguard Worker        Args:
239*9a741119SAndroid Build Coastguard Worker            symndx: An integer specifying the new symbol table index.
240*9a741119SAndroid Build Coastguard Worker            type_: An integer specifying the new relocation type.
241*9a741119SAndroid Build Coastguard Worker        """
242*9a741119SAndroid Build Coastguard Worker        self.r_info = (symndx << 8) | (type_ & 0xff)
243*9a741119SAndroid Build Coastguard Worker
244*9a741119SAndroid Build Coastguard Worker
245*9a741119SAndroid Build Coastguard Workerclass Elf32_Rel(_32_Rel):
246*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit relocation table entry."""
247*9a741119SAndroid Build Coastguard Worker    _fields_ = [('r_offset', Elf32_Addr),
248*9a741119SAndroid Build Coastguard Worker                ('r_info', Elf32_Word)]
249*9a741119SAndroid Build Coastguard Worker
250*9a741119SAndroid Build Coastguard Worker
251*9a741119SAndroid Build Coastguard Workerclass Elf32_Rela(_32_Rel):
252*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit relocation table entry with explicit addend."""
253*9a741119SAndroid Build Coastguard Worker    _fields_ = [('r_offset', Elf32_Addr),
254*9a741119SAndroid Build Coastguard Worker                ('r_info', Elf32_Word),
255*9a741119SAndroid Build Coastguard Worker                ('r_addend', Elf32_Sword)]
256*9a741119SAndroid Build Coastguard Worker
257*9a741119SAndroid Build Coastguard Worker
258*9a741119SAndroid Build Coastguard Workerclass _64_Rel(CStructure):
259*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit relocation table entry base class."""
260*9a741119SAndroid Build Coastguard Worker
261*9a741119SAndroid Build Coastguard Worker    def GetSymbol(self):
262*9a741119SAndroid Build Coastguard Worker        """Returns the symbol table index with respect to the relocation.
263*9a741119SAndroid Build Coastguard Worker
264*9a741119SAndroid Build Coastguard Worker        Symbol table index with respect to which the relocation must be made.
265*9a741119SAndroid Build Coastguard Worker        """
266*9a741119SAndroid Build Coastguard Worker        return self.r_info >> 32
267*9a741119SAndroid Build Coastguard Worker
268*9a741119SAndroid Build Coastguard Worker    def GetType(self):
269*9a741119SAndroid Build Coastguard Worker        """Returns the relocation type."""
270*9a741119SAndroid Build Coastguard Worker        return self.r_info & 0xffffffff
271*9a741119SAndroid Build Coastguard Worker
272*9a741119SAndroid Build Coastguard Worker    def SetSymbol(self, symndx):
273*9a741119SAndroid Build Coastguard Worker        """Sets the relocation's symbol table index.
274*9a741119SAndroid Build Coastguard Worker
275*9a741119SAndroid Build Coastguard Worker        Args:
276*9a741119SAndroid Build Coastguard Worker            symndx: An integer specifying the new symbol table index.
277*9a741119SAndroid Build Coastguard Worker        """
278*9a741119SAndroid Build Coastguard Worker        self.SetSymbolAndType(symndx, self.GetType())
279*9a741119SAndroid Build Coastguard Worker
280*9a741119SAndroid Build Coastguard Worker    def SetType(self, type_):
281*9a741119SAndroid Build Coastguard Worker        """Sets the relocation type.
282*9a741119SAndroid Build Coastguard Worker
283*9a741119SAndroid Build Coastguard Worker        Args:
284*9a741119SAndroid Build Coastguard Worker            type_: An integer specifying the new relocation type.
285*9a741119SAndroid Build Coastguard Worker        """
286*9a741119SAndroid Build Coastguard Worker        self.SetSymbolAndType(self.GetSymbol(), type_)
287*9a741119SAndroid Build Coastguard Worker
288*9a741119SAndroid Build Coastguard Worker    def SetSymbolAndType(self, symndx, type_):
289*9a741119SAndroid Build Coastguard Worker        """Sets the relocation's symbol table index and type.
290*9a741119SAndroid Build Coastguard Worker
291*9a741119SAndroid Build Coastguard Worker        Args:
292*9a741119SAndroid Build Coastguard Worker            symndx: An integer specifying the new symbol table index.
293*9a741119SAndroid Build Coastguard Worker            type_: An integer specifying the new relocation type.
294*9a741119SAndroid Build Coastguard Worker        """
295*9a741119SAndroid Build Coastguard Worker        self.r_info = (symndx << 32) | (type_ & 0xffffffff)
296*9a741119SAndroid Build Coastguard Worker
297*9a741119SAndroid Build Coastguard Worker
298*9a741119SAndroid Build Coastguard Workerclass Elf64_Rel(_64_Rel):
299*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit relocation table entry."""
300*9a741119SAndroid Build Coastguard Worker    _fields_ = [('r_offset', Elf64_Addr),
301*9a741119SAndroid Build Coastguard Worker                ('r_info', Elf64_Xword)]
302*9a741119SAndroid Build Coastguard Worker
303*9a741119SAndroid Build Coastguard Worker
304*9a741119SAndroid Build Coastguard Workerclass Elf64_Rela(_64_Rel):
305*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit relocation table entry with explicit addend."""
306*9a741119SAndroid Build Coastguard Worker    _fields_ = [('r_offset', Elf64_Addr),
307*9a741119SAndroid Build Coastguard Worker                ('r_info', Elf64_Xword),
308*9a741119SAndroid Build Coastguard Worker                ('r_addend', Elf64_Sxword)]
309*9a741119SAndroid Build Coastguard Worker
310*9a741119SAndroid Build Coastguard Worker
311*9a741119SAndroid Build Coastguard Workerclass Elf32_Phdr(CStructure):
312*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit program header."""
313*9a741119SAndroid Build Coastguard Worker    _fields_ = [('p_type', Elf32_Word),
314*9a741119SAndroid Build Coastguard Worker                ('p_offset', Elf32_Off),
315*9a741119SAndroid Build Coastguard Worker                ('p_vaddr', Elf32_Addr),
316*9a741119SAndroid Build Coastguard Worker                ('p_paddr', Elf32_Addr),
317*9a741119SAndroid Build Coastguard Worker                ('p_filesz', Elf32_Word),
318*9a741119SAndroid Build Coastguard Worker                ('p_memsz', Elf32_Word),
319*9a741119SAndroid Build Coastguard Worker                ('p_flags', Elf32_Word),
320*9a741119SAndroid Build Coastguard Worker                ('p_align', Elf32_Word)]
321*9a741119SAndroid Build Coastguard Worker
322*9a741119SAndroid Build Coastguard Worker
323*9a741119SAndroid Build Coastguard Workerclass Elf64_Phdr(CStructure):
324*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit program header."""
325*9a741119SAndroid Build Coastguard Worker    _fields_ = [('p_type', Elf64_Word),
326*9a741119SAndroid Build Coastguard Worker                ('p_flags', Elf64_Word),
327*9a741119SAndroid Build Coastguard Worker                ('p_offset', Elf64_Off),
328*9a741119SAndroid Build Coastguard Worker                ('p_vaddr', Elf64_Addr),
329*9a741119SAndroid Build Coastguard Worker                ('p_paddr', Elf64_Addr),
330*9a741119SAndroid Build Coastguard Worker                ('p_filesz', Elf64_Xword),
331*9a741119SAndroid Build Coastguard Worker                ('p_memsz', Elf64_Xword),
332*9a741119SAndroid Build Coastguard Worker                ('p_align', Elf64_Xword)]
333*9a741119SAndroid Build Coastguard Worker
334*9a741119SAndroid Build Coastguard Worker
335*9a741119SAndroid Build Coastguard Workerclass Elf32_Nhdr(CStructure):
336*9a741119SAndroid Build Coastguard Worker    """ELF 32-bit note header."""
337*9a741119SAndroid Build Coastguard Worker    _fields_ = [('n_namesz', Elf32_Word),
338*9a741119SAndroid Build Coastguard Worker                ('n_descsz', Elf32_Word),
339*9a741119SAndroid Build Coastguard Worker                ('n_type', Elf32_Word)]
340*9a741119SAndroid Build Coastguard Worker
341*9a741119SAndroid Build Coastguard Worker
342*9a741119SAndroid Build Coastguard Workerclass Elf64_Nhdr(CStructure):
343*9a741119SAndroid Build Coastguard Worker    """ELF 64-bit note header."""
344*9a741119SAndroid Build Coastguard Worker    _fields_ = [('n_namesz', Elf64_Word),
345*9a741119SAndroid Build Coastguard Worker                ('n_descsz', Elf64_Word),
346*9a741119SAndroid Build Coastguard Worker                ('n_type', Elf64_Word)]
347