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