1# 2# Copyright (C) 2018 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16"""This file contains ELF constants.""" 17 18# e_ident[] indices 19EI_MAG0 = 0 # File identification 20EI_MAG1 = 1 # File identification 21EI_MAG2 = 2 # File identification 22EI_MAG3 = 3 # File identification 23EI_CLASS = 4 # File class 24EI_DATA = 5 # Data encoding 25EI_VERSION = 6 # File version 26EI_OSABI = 7 # Operating system/ABI identification 27EI_ABIVERSION = 8 # ABI version 28EI_PAD = 9 # Start of padding bytes 29EI_NIDENT = 16 # Size of e_ident[] 30 31# EI_MAG0 to EI_MAG3 32ELF_MAGIC_NUMBER = b'\x7fELF' 33 34# EI_CLASS 35ELFCLASSNONE = 0 # Invalid class 36ELFCLASS32 = 1 # 32-bit objects 37ELFCLASS64 = 2 # 64-bit objects 38 39# EI_DATA 40ELFDATANONE = 0 # Invalid data encoding 41ELFDATA2LSB = 1 # Little endian 42ELFDATA2MSB = 2 # Big endian 43 44# e_type 45ET_NONE = 0 # No file type 46ET_REL = 1 # Relocatable file (object file) 47ET_EXEC = 2 # Executable file 48ET_DYN = 3 # Shared object file 49ET_CORE = 4 # Core file 50 51# e_machine 52EM_386 = 3 53EM_X86_64 = 62 54EM_ARM = 40 55EM_AARCH64 = 183 56EM_RISCV = 243 57 58# Relocation types 59R_ARM_ABS32 = 0x02 60R_ARM_RELATIVE = 0x17 61R_AARCH64_ABS64 = 0x101 62R_AARCH64_RELATIVE = 0x403 63R_386_32 = 1 64R_386_RELATIVE = 8 65R_X86_64_64 = 1 66R_X86_64_RELATIVE = 8 67R_RISCV_64 = 2 68R_RISCV_RELATIVE = 3 69 70# Section types 71SHT_NULL = 0 72SHT_PROGBITS = 1 73SHT_SYMTAB = 2 74SHT_STRTAB = 3 75SHT_RELA = 4 76SHT_HASH = 5 77SHT_DYNAMIC = 6 78SHT_NOTE = 7 79SHT_NOBITS = 8 80SHT_REL = 9 81SHT_SHLIB = 10 82SHT_DYNSYM = 11 83SHT_INIT_ARRAY = 14 84SHT_FINI_ARRAY = 15 85SHT_PREINIT_ARRAY = 16 86SHT_GROUP = 17 87SHT_SYMTAB_SHNDX = 18 88SHT_RELR = 19 89SHT_LOOS = 0x60000000 90SHT_ANDROID_REL = SHT_LOOS + 1 91SHT_ANDROID_RELA = SHT_LOOS + 2 92SHT_ANDROID_RELR = SHT_LOOS + 0xfffff00 93 94# Android packed relocation flags 95RELOCATION_GROUPED_BY_INFO_FLAG = 1 96RELOCATION_GROUPED_BY_OFFSET_DELTA_FLAG = 2 97RELOCATION_GROUPED_BY_ADDEND_FLAG = 4 98RELOCATION_GROUP_HAS_ADDEND_FLAG = 8 99 100# Section names 101SYMTAB = '.symtab' 102STRTAB = '.strtab' 103DYNSYM = '.dynsym' 104DYNSTR = '.dynstr' 105 106# Special section indices 107SHN_UNDEF = 0 108SHN_LORESERVE = 0xff00 109SHN_LOPROC = 0xff00 110SHN_HIPROC = 0xff1f 111SHN_LOOS = 0xff20 112SHN_HIOS = 0xff3f 113SHN_ABS = 0xfff1 114SHN_COMMON = 0xfff2 115SHN_XINDEX = 0xffff 116SHN_HIRESERVE = 0xffff 117 118# Symbol bindings 119STB_LOCAL = 0 120STB_GLOBAL = 1 121STB_WEAK = 2 122STB_LOOS = 10 123STB_HIOS = 12 124STB_LOPROC = 13 125STB_HIPROC = 15 126 127# Symbol types 128STT_NOTYPE = 0 129STT_OBJECT = 1 130STT_FUNC = 2 131STT_SECTION = 3 132STT_FILE = 4 133STT_COMMON = 5 134STT_TLS = 6 135STT_LOOS = 10 136STT_HIOS = 12 137STT_LOPROC = 13 138STT_HIPROC = 15 139 140# Segment types 141PT_NULL = 0 142PT_LOAD = 1 143PT_DYNAMIC = 2 144PT_INTERP = 3 145PT_NOTE = 4 146PT_SHLIB = 5 147PT_PHDR = 6 148PT_TLS = 7 149PT_LOOS = 0x60000000 150PT_HIOS = 0x6fffffff 151PT_LOPROC = 0x70000000 152PT_HIPROC = 0x7fffffff 153PT_GNU_EH_FRAME = 0x6474e550 154PT_SUNW_EH_FRAME = 0x6474e550 155PT_SUNW_UNWIND = 0x6464e550 156PT_GNU_STACK = 0x6474e551 157PT_GNU_RELRO = 0x6474e552 158PT_ARM_ARCHEXT = 0x70000000 159PT_ARM_EXIDX = 0x70000001 160PT_ARM_UNWIND = 0x70000001 161 162# Dynamic array tags 163# Name Value d_un Executable Shared Object 164DT_NULL = 0 # ignored mandatory mandatory 165DT_NEEDED = 1 # d_val optional optional 166DT_PLTRELSZ = 2 # d_val optional optional 167DT_PLTGOT = 3 # d_ptr optional optional 168DT_HASH = 4 # d_ptr mandatory mandatory 169DT_STRTAB = 5 # d_ptr mandatory mandatory 170DT_SYMTAB = 6 # d_ptr mandatory mandatory 171DT_RELA = 7 # d_ptr mandatory optional 172DT_RELASZ = 8 # d_val mandatory optional 173DT_RELAENT = 9 # d_val mandatory optional 174DT_STRSZ = 10 # d_val mandatory mandatory 175DT_SYMENT = 11 # d_val mandatory mandatory 176DT_INIT = 12 # d_ptr optional optional 177DT_FINI = 13 # d_ptr optional optional 178DT_SONAME = 14 # d_val ignored optional 179DT_RPATH = 15 # d_val optional ignored 180DT_SYMBOLIC = 16 # ignored ignored optional 181DT_REL = 17 # d_ptr mandatory optional 182DT_RELSZ = 18 # d_val mandatory optional 183DT_RELENT = 19 # d_val mandatory optional 184DT_PLTREL = 20 # d_val optional optional 185DT_DEBUG = 21 # d_ptr optional ignored 186DT_TEXTREL = 22 # ignored optional optional 187DT_JMPREL = 23 # d_ptr optional optional 188DT_BIND_NOW = 24 # ignored optional optional 189DT_INIT_ARRAY = 25 # d_ptr optional optional 190DT_FINI_ARRAY = 26 # d_ptr optional optional 191DT_INIT_ARRAYSZ = 27 # d_val optional optional 192DT_FINI_ARRAYSZ = 28 # d_val optional optional 193DT_RUNPATH = 29 # d_val optional optional 194DT_FLAGS = 30 # d_val optional optional 195DT_ENCODING = 32 # unspecified unspecified unspecified 196DT_LOOS = 0x6000000D # unspecified unspecified unspecified 197DT_ANDROID_REL = DT_LOOS + 2 # d_ptr 198DT_ANDROID_RELSZ = DT_LOOS + 3 # d_val 199DT_ANRDOID_RELA = DT_LOOS + 4 # d_ptr 200DT_ANRDOID_RELASZ = DT_LOOS + 5 # d_val 201DT_RELR = 0x6fffe000 # d_ptr 202DT_RELRSZ = 0x6fffe001 # d_val 203DT_RELRENT = 0x6fffe003 # d_val 204