#ifndef __ELFR_PPC_H__ #define __ELFR_PPC_H__ #ifndef __ELFBASE_H__ #include "elfbase.h" #endif #define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ #define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag */ #define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib flag */ // PowerPC 64 ABI version #define EF_PPC64_ABI_MASK 3 // original function descriptor using ABI #define EF_PPC64_UNK_ABI 0 // unspecified or not using any features // affected by the differences #define EF_PPC64_AIX_ABI 1 // original function descriptor using ABI #define EF_PPC64_V2_ABI 2 // revised ABI without function descriptors enum elf_ET_PPC { ET_PS3PRX = 0xFFA4, // Sony PS3 PRX }; enum elf_SHT_PPC { SHT_PS3PRX_RELA = 0x700000A4, // Sony PS3 PRX relocations }; enum elf_PHT_PPC { PHT_PS3PRX_RELA = 0x700000A4, // Sony PS3 PRX relocations }; enum elf_DT_PPC { DT_PPC_GOT = (DT_LOPROC + 0x0), // address of _GLOBAL_OFFSET_TABLE_ }; // relocation field - word32 with HIGH BYTE FIRST!!! // A- from Elf32_Rela // B- Loading address of shared object // G- offset into global objet table // GOT- adress of global object table // L- linkage table entry // P- plase of storage unit (computed using r_offset) // S- value of symbol enum elf_RTYPE_ppc { R_PPC_NONE = 0, // No reloc R_PPC_ADDR32 = 1, // S+A-P Direct 32 bit R_PPC_ADDR24 = 2, R_PPC_ADDR16 = 3, R_PPC_ADDR16_LO = 4, R_PPC_ADDR16_HI = 5, R_PPC_ADDR16_HA = 6, R_PPC_ADDR14 = 7, R_PPC_ADDR14_BRTAKEN = 8, R_PPC_ADDR14_BRNTAKEN = 9, R_PPC_REL24 = 10, // S+A relative 24 bit R_PPC_REL14 = 11, R_PPC_REL14_BRTAKEN = 12, R_PPC_REL14_BRNTAKEN = 13, R_PPC_GOT16 = 14, R_PPC_GOT16_LO = 15, R_PPC_GOT16_HI = 16, R_PPC_GOT16_HA = 17, R_PPC_PLTREL24 = 18, R_PPC_COPY = 19, R_PPC_GLOB_DAT = 20, R_PPC_JMP_SLOT = 21, R_PPC_RELATIVE = 22, R_PPC_LOCAL24PC = 23, R_PPC_UADDR32 = 24, R_PPC_UADDR16 = 25, R_PPC_REL32 = 26, R_PPC_PLT32 = 27, R_PPC_PLTREL32 = 28, R_PPC_PLT16_LO = 29, R_PPC_PLT16_HI = 30, R_PPC_PLT16_HA = 31, R_PPC_SDAREL16 = 32, R_PPC_SECTOFF = 33, R_PPC_SECTOFF_LO = 34, R_PPC_SECTOFF_HI = 35, R_PPC_SECTOFF_HA = 36, R_PPC_ADDR30 = 37, // word30 (S + A - P) >> 2 // some undocumented relocs used by freescale // some seem to be the same as official VLE relocs below // NB! they conflict with some PPC64 relocations R_PPC_FVLE_REL8 = 38, // same as R_PPC_VLE_REL8? R_PPC_FVLE_REL15 = 39, // same as R_PPC_VLE_REL15? R_PPC_FVLE_REL24 = 40, // same as R_PPC_VLE_REL24? R_PPC_FVLE_ADDR8 = 44, // ?? R_PPC_FVLE_ADDR4 = 45, // ?? R_PPC_FVLE_SDA = 47, // same as R_PPC_VLE_SDA21? R_PPC_FVLE_LO16A = 49, // same as R_PPC_VLE_LO16A? R_PPC_FVLE_HI16A = 50, // same as R_PPC_VLE_HI16A? R_PPC_FVLE_HA16A = 51, // same as R_PPC_VLE_HA16A? R_PPC_FVLE_LO16D = 56, // same as R_PPC_VLE_LO16D? R_PPC_FVLE_HI16D = 57, // same as R_PPC_VLE_HI16D? R_PPC_FVLE_HA16D = 58, // same as R_PPC_VLE_HA16D? /* Relocs added to support TLS. */ R_PPC_TLS = 67, R_PPC_DTPMOD32 = 68, R_PPC_TPREL16 = 69, R_PPC_TPREL16_LO = 70, R_PPC_TPREL16_HI = 71, R_PPC_TPREL16_HA = 72, R_PPC_TPREL32 = 73, R_PPC_DTPREL16 = 74, R_PPC_DTPREL16_LO = 75, R_PPC_DTPREL16_HI = 76, R_PPC_DTPREL16_HA = 77, R_PPC_DTPREL32 = 78, R_PPC_GOT_TLSGD16 = 79, R_PPC_GOT_TLSGD16_LO = 80, R_PPC_GOT_TLSGD16_HI = 81, R_PPC_GOT_TLSGD16_HA = 82, R_PPC_GOT_TLSLD16 = 83, R_PPC_GOT_TLSLD16_LO = 84, R_PPC_GOT_TLSLD16_HI = 85, R_PPC_GOT_TLSLD16_HA = 86, R_PPC_GOT_TPREL16 = 87, R_PPC_GOT_TPREL16_LO = 88, R_PPC_GOT_TPREL16_HI = 89, R_PPC_GOT_TPREL16_HA = 90, R_PPC_GOT_DTPREL16 = 91, R_PPC_GOT_DTPREL16_LO = 92, R_PPC_GOT_DTPREL16_HI = 93, R_PPC_GOT_DTPREL16_HA = 94, R_PPC_TLSGD = 95, R_PPC_TLSLD = 96, R_PPC_EMB_NADDR32 = 101, // word32 (A - S) R_PPC_EMB_NADDR16 = 102, // half16* (A - S) R_PPC_EMB_NADDR16_LO = 103, // half16 #lo(A - S) R_PPC_EMB_NADDR16_HI = 104, // half16 #hi(A - S) R_PPC_EMB_NADDR16_HA = 105, // half16 #ha(A - S) R_PPC_EMB_SDA_I16 = 106, // half16* T R_PPC_EMB_SDA2_I16 = 107, // half16* U R_PPC_EMB_SDA2REL = 108, // half16* S + A - _SDA2_BASE_ R_PPC_EMB_SDA21 = 109, // low21 Y || (X + A) R_PPC_EMB_MRKREF = 110, // none See below R_PPC_EMB_RELSEC16 = 111, // half16* V + A R_PPC_EMB_RELST_LO = 112, // half16 #lo(W + A) R_PPC_EMB_RELST_HI = 113, // half16 #hi(W + A) R_PPC_EMB_RELST_HA = 114, // half16 #ha(W + A) R_PPC_EMB_BIT_FLD = 115, // word32* See below R_PPC_EMB_RELSDA = 116, // half16* X + A. See below R_PPC_EMB_RELOC_120 = 120, // half16* S + A R_PPC_EMB_RELOC_121 = 121, // half16* Same calculation as U, except that the value 0 is used instead of _SDA2_BASE_. /* The R_PPC_DIAB_SDA21_xx relocation modes work like the R_PPC_EMB_SDA21 mode * and the R_PPC_DIAB_RELSDA_xx relocation modes work like the R_PPC_EMB_RELSDA mode * with the following exceptions: * If the symbol is in .data, .sdata, .bss, .sbss the symbol is DATA relative (r13 base pointer/_SDA_BASE_ base address) * If the symbol is in .text, .sdata2, .sbss2 the symbol is CODE relative (r2 base pointer/_SDA_BASE2_ base address) * Otherwise the symbol is absolute (r0 base pointer/0 base address) */ R_PPC_DIAB_SDA21_LO = 180, // half21 Y || #lo(X + A) R_PPC_DIAB_SDA21_HI = 181, // half21 Y || #hi(X + A) R_PPC_DIAB_SDA21_HA = 182, // half21 Y || #ha(X + A) R_PPC_DIAB_RELSDA_LO = 183, // half16 #lo(X + A) R_PPC_DIAB_RELSDA_HI = 184, // half16 #hi(X + A) R_PPC_DIAB_RELSDA_HA = 185, // half16 #ha(X + A) R_PPC_DIAB_IMTO = 186, R_PPC_DIAB_IMT = 187, R_PPC_DIAB_ADDR0 = 188, R_PPC_DIAB_OVERRIDE0 = 189, R_PPC_DIAB_VTBL32 = 190, R_PPC_DIAB_LAST = 191, R_PPC_EMB_SPE_DOUBLE = 201, // mid5* (#lo(S + A)) >> 3 R_PPC_EMB_SPE_WORD = 202, // mid5* (#lo(S + A)) >> 2 R_PPC_EMB_SPE_HALF = 203, // mid5* (#lo(S + A)) >> 1 R_PPC_EMB_SPE_DOUBLE_SDAREL = 204, // mid5* (#lo(S + A - _SDA_BASE_)) >> 3 R_PPC_EMB_SPE_WORD_SDAREL = 205, // mid5* (#lo(S + A - _SDA_BASE_)) >> 2 R_PPC_EMB_SPE_HALF_SDAREL = 206, // mid5* (#lo(S + A - _SDA_BASE_)) >> 1 R_PPC_EMB_SPE_DOUBLE_SDA2REL = 207, // mid5* (#lo(S + A - _SDA2_BASE_)) >> 3 R_PPC_EMB_SPE_WORD_SDA2REL = 208, // mid5* (#lo(S + A - _SDA2_BASE_)) >> 2 R_PPC_EMB_SPE_HALF_SDA2REL = 209, // mid5* (#lo(S + A - _SDA2_BASE_)) >> 1 R_PPC_EMB_SPE_DOUBLE_SDA0REL = 210, // mid5* (#lo(S + A)) >> 3 R_PPC_EMB_SPE_WORD_SDA0REL = 211, // mid5* (#lo(S + A)) >> 2 R_PPC_EMB_SPE_HALF_SDA0REL = 212, // mid5* (#lo(S + A)) >> 1 R_PPC_EMB_SPE_DOUBLE_SDA = 213, // mid10* Y || ((#lo(X + A)) >> 3) R_PPC_EMB_SPE_WORD_SDA = 214, // mid10* Y || ((#lo(X + A)) >> 2) R_PPC_EMB_SPE_HALF_SDA = 215, // mid10* Y || ((#lo(X + A)) >> 1) R_PPC_VLE_REL8 = 216, // bdh8 (S + A - P) >> 1 R_PPC_VLE_REL15 = 217, // bdh15 (S + A - P) >> 1 R_PPC_VLE_REL24 = 218, // bdh24 (S + A - P) >> 1 R_PPC_VLE_LO16A = 219, // split16a #lo(S + A) R_PPC_VLE_LO16D = 220, // split16d #lo(S + A) R_PPC_VLE_HI16A = 221, // split16a #hi(S + A) R_PPC_VLE_HI16D = 222, // split16d #hi(S + A) R_PPC_VLE_HA16A = 223, // split16a #ha(S + A) R_PPC_VLE_HA16D = 224, // split16d #ha(S + A) R_PPC_VLE_SDA21 = 225, // low21, split20 Y || (X + A) R_PPC_VLE_SDA21_LO = 226, // low21, split20 Y || #lo(X + A) R_PPC_VLE_SDAREL_LO16A = 227, // split16a #lo(X + A) R_PPC_VLE_SDAREL_LO16D = 228, // split16d #lo(X + A) R_PPC_VLE_SDAREL_HI16A = 229, // split16a #hi(X + A) R_PPC_VLE_SDAREL_HI16D = 230, // split16d #hi(X + A) R_PPC_VLE_SDAREL_HA16A = 231, // split16a #ha(X + A) R_PPC_VLE_SDAREL_HA16D = 232, // split16d #ha(X + A) R_PPC_REL16DX_HA = 246, R_PPC_IRELATIVE = 248, // GNU extension to support local ifunc. /* GNU relocs used in PIC code sequences. */ R_PPC_REL16 = 249, // half16* S + A - P R_PPC_REL16_LO = 250, // half16 #lo(S + A - P) R_PPC_REL16_HI = 251, // half16 #hi(S + A - P) R_PPC_REL16_HA = 252, // half16 #la(S + A - P) R_PPC_GNU_VTINHERIT = 253, R_PPC_GNU_VTENTRY = 254, /* This is a phony reloc to handle any old fashioned TOC16 references that may still be in object files. */ R_PPC_TOC16 = 255, // PowerPC64 relocations. Many (but not all) of them are the same as for PPC32 R_PPC64_NONE = R_PPC_NONE, R_PPC64_ADDR32 = R_PPC_ADDR32, /* 32bit absolute address. */ R_PPC64_ADDR24 = R_PPC_ADDR24, /* 26bit address, word aligned. */ R_PPC64_ADDR16 = R_PPC_ADDR16, /* 16bit absolute address. */ R_PPC64_ADDR16_LO = R_PPC_ADDR16_LO, /* lower 16bits of abs. address. */ R_PPC64_ADDR16_HI = R_PPC_ADDR16_HI, /* high 16bits of abs. address. */ R_PPC64_ADDR16_HA = R_PPC_ADDR16_HA, /* adjusted high 16bits. */ R_PPC64_ADDR14 = R_PPC_ADDR14, /* 16bit address, word aligned. */ R_PPC64_ADDR14_BRTAKEN = R_PPC_ADDR14_BRTAKEN, R_PPC64_ADDR14_BRNTAKEN = R_PPC_ADDR14_BRNTAKEN, R_PPC64_REL24 = R_PPC_REL24, /* PC relative 26 bit, word aligned. */ R_PPC64_REL14 = R_PPC_REL14, /* PC relative 16 bit. */ R_PPC64_REL14_BRTAKEN = R_PPC_REL14_BRTAKEN, R_PPC64_REL14_BRNTAKEN = R_PPC_REL14_BRNTAKEN, R_PPC64_GOT16 = R_PPC_GOT16, R_PPC64_GOT16_LO = R_PPC_GOT16_LO, R_PPC64_GOT16_HI = R_PPC_GOT16_HI, R_PPC64_GOT16_HA = R_PPC_GOT16_HA, R_PPC64_PLTREL24 = R_PPC_PLTREL24, R_PPC64_COPY = R_PPC_COPY, R_PPC64_GLOB_DAT = R_PPC_GLOB_DAT, R_PPC64_JMP_SLOT = R_PPC_JMP_SLOT, R_PPC64_RELATIVE = R_PPC_RELATIVE, R_PPC64_LOCAL24PC = R_PPC_LOCAL24PC, R_PPC64_UADDR32 = R_PPC_UADDR32, R_PPC64_UADDR16 = R_PPC_UADDR16, R_PPC64_REL32 = R_PPC_REL32, R_PPC64_PLT32 = R_PPC_PLT32, R_PPC64_PLTREL32 = R_PPC_PLTREL32, R_PPC64_PLT16_LO = R_PPC_PLT16_LO, R_PPC64_PLT16_HI = R_PPC_PLT16_HI, R_PPC64_PLT16_HA = R_PPC_PLT16_HA, R_PPC64_SDAREL16 = R_PPC_SDAREL16, R_PPC64_SECTOFF = R_PPC_SECTOFF, R_PPC64_SECTOFF_LO = R_PPC_SECTOFF_LO, R_PPC64_SECTOFF_HI = R_PPC_SECTOFF_HI, R_PPC64_SECTOFF_HA = R_PPC_SECTOFF_HA, R_PPC64_ADDR30 = 37, /* word30 (S + A - P) >> 2. */ R_PPC64_ADDR64 = 38, /* doubleword64 S + A. */ R_PPC64_ADDR16_HIGHER = 39, /* half16 #higher(S + A). */ R_PPC64_ADDR16_HIGHERA = 40, /* half16 #highera(S + A). */ R_PPC64_ADDR16_HIGHEST = 41, /* half16 #highest(S + A). */ R_PPC64_ADDR16_HIGHESTA = 42, /* half16 #highesta(S + A). */ R_PPC64_UADDR64 = 43, /* doubleword64 S + A. */ R_PPC64_REL64 = 44, /* doubleword64 S + A - P. */ R_PPC64_PLT64 = 45, /* doubleword64 L + A. */ R_PPC64_PLTREL64 = 46, /* doubleword64 L + A - P. */ R_PPC64_TOC16 = 47, /* half16* S + A - .TOC. */ R_PPC64_TOC16_LO = 48, /* half16 #lo(S + A - .TOC.). */ R_PPC64_TOC16_HI = 49, /* half16 #hi(S + A - .TOC.). */ R_PPC64_TOC16_HA = 50, /* half16 #ha(S + A - .TOC.). */ R_PPC64_TOC = 51, /* doubleword64 .TOC. */ R_PPC64_PLTGOT16 = 52, /* half16* M + A. */ R_PPC64_PLTGOT16_LO = 53, /* half16 #lo(M + A). */ R_PPC64_PLTGOT16_HI = 54, /* half16 #hi(M + A). */ R_PPC64_PLTGOT16_HA = 55, /* half16 #ha(M + A). */ R_PPC64_ADDR16_DS = 56, /* half16ds* (S + A) >> 2. */ R_PPC64_ADDR16_LO_DS = 57, /* half16ds #lo(S + A) >> 2. */ R_PPC64_GOT16_DS = 58, /* half16ds* (G + A) >> 2. */ R_PPC64_GOT16_LO_DS = 59, /* half16ds #lo(G + A) >> 2. */ R_PPC64_PLT16_LO_DS = 60, /* half16ds #lo(L + A) >> 2. */ R_PPC64_SECTOFF_DS = 61, /* half16ds* (R + A) >> 2. */ R_PPC64_SECTOFF_LO_DS = 62, /* half16ds #lo(R + A) >> 2. */ R_PPC64_TOC16_DS = 63, /* half16ds* (S + A - .TOC.) >> 2. */ R_PPC64_TOC16_LO_DS = 64, /* half16ds #lo(S + A - .TOC.) >> 2. */ R_PPC64_PLTGOT16_DS = 65, /* half16ds* (M + A) >> 2. */ R_PPC64_PLTGOT16_LO_DS = 66, /* half16ds #lo(M + A) >> 2. */ /* PowerPC64 relocations defined for the TLS access ABI. */ R_PPC64_TLS = 67, /* none (sym+add)@tls */ R_PPC64_DTPMOD64 = 68, /* doubleword64 (sym+add)@dtpmod */ R_PPC64_TPREL16 = 69, /* half16* (sym+add)@tprel */ R_PPC64_TPREL16_LO = 70, /* half16 (sym+add)@tprel@l */ R_PPC64_TPREL16_HI = 71, /* half16 (sym+add)@tprel@h */ R_PPC64_TPREL16_HA = 72, /* half16 (sym+add)@tprel@ha */ R_PPC64_TPREL64 = 73, /* doubleword64 (sym+add)@tprel */ R_PPC64_DTPREL16 = 74, /* half16* (sym+add)@dtprel */ R_PPC64_DTPREL16_LO = 75, /* half16 (sym+add)@dtprel@l */ R_PPC64_DTPREL16_HI = 76, /* half16 (sym+add)@dtprel@h */ R_PPC64_DTPREL16_HA = 77, /* half16 (sym+add)@dtprel@ha */ R_PPC64_DTPREL64 = 78, /* doubleword64 (sym+add)@dtprel */ R_PPC64_GOT_TLSGD16 = 79, /* half16* (sym+add)@got@tlsgd */ R_PPC64_GOT_TLSGD16_LO = 80, /* half16 (sym+add)@got@tlsgd@l */ R_PPC64_GOT_TLSGD16_HI = 81, /* half16 (sym+add)@got@tlsgd@h */ R_PPC64_GOT_TLSGD16_HA = 82, /* half16 (sym+add)@got@tlsgd@ha */ R_PPC64_GOT_TLSLD16 = 83, /* half16* (sym+add)@got@tlsld */ R_PPC64_GOT_TLSLD16_LO = 84, /* half16 (sym+add)@got@tlsld@l */ R_PPC64_GOT_TLSLD16_HI = 85, /* half16 (sym+add)@got@tlsld@h */ R_PPC64_GOT_TLSLD16_HA = 86, /* half16 (sym+add)@got@tlsld@ha */ R_PPC64_GOT_TPREL16_DS = 87, /* half16ds* (sym+add)@got@tprel */ R_PPC64_GOT_TPREL16_LO_DS = 88, /* half16ds (sym+add)@got@tprel@l */ R_PPC64_GOT_TPREL16_HI = 89, /* half16 (sym+add)@got@tprel@h */ R_PPC64_GOT_TPREL16_HA = 90, /* half16 (sym+add)@got@tprel@ha */ R_PPC64_GOT_DTPREL16_DS = 91, /* half16ds* (sym+add)@got@dtprel */ R_PPC64_GOT_DTPREL16_LO_DS = 92, /* half16ds (sym+add)@got@dtprel@l */ R_PPC64_GOT_DTPREL16_HI = 93, /* half16 (sym+add)@got@dtprel@h */ R_PPC64_GOT_DTPREL16_HA = 94, /* half16 (sym+add)@got@dtprel@ha */ R_PPC64_TPREL16_DS = 95, /* half16ds* (sym+add)@tprel */ R_PPC64_TPREL16_LO_DS = 96, /* half16ds (sym+add)@tprel@l */ R_PPC64_TPREL16_HIGHER = 97, /* half16 (sym+add)@tprel@higher */ R_PPC64_TPREL16_HIGHERA = 98, /* half16 (sym+add)@tprel@highera */ R_PPC64_TPREL16_HIGHEST = 99, /* half16 (sym+add)@tprel@highest */ R_PPC64_TPREL16_HIGHESTA = 100, /* half16 (sym+add)@tprel@highesta */ R_PPC64_DTPREL16_DS = 101, /* half16ds* (sym+add)@dtprel */ R_PPC64_DTPREL16_LO_DS = 102, /* half16ds (sym+add)@dtprel@l */ R_PPC64_DTPREL16_HIGHER = 103, /* half16 (sym+add)@dtprel@higher */ R_PPC64_DTPREL16_HIGHERA = 104, /* half16 (sym+add)@dtprel@highera */ R_PPC64_DTPREL16_HIGHEST = 105, /* half16 (sym+add)@dtprel@highest */ R_PPC64_DTPREL16_HIGHESTA = 106, /* half16 (sym+add)@dtprel@highesta */ #if 0 // These relocation types appear in David Anderson's libdwarf and // dwarfdump only. The PPC 64-Bit ELF V2 ABI uses these numbers for // different types (see below). R_PPC64_TOC32 = 107, /* word32 (.TOC. & 0xffff_ffff) */ R_PPC64_DTPMOD32 = 108, /* word32 (@dtpmod & 0xffff_ffff) */ R_PPC64_TPREL32 = 109, /* word32 (@tprel & 0xffff_ffff) */ R_PPC64_DTPREL32 = 110, /* word32 (@dtprel & 0xffff_ffff) */ #else // The PPC 64-Bit ELF V2 ABI uses these numbers for different types R_PPC64_TLSGD = 107, // used as markers on thread local R_PPC64_TLSLD = 108, // storage (TLS) code sequences R_PPC64_TOCSAVE = 109, // this relocation type indicates a // position where a TOC save may be // inserted in the function to avoid a // TOC save as part of the PLT stub code R_PPC64_ADDR16_HIGH = 110, // half16 #hi(S + A) R_PPC64_ADDR16_HIGHA = 111, // half16 #ha(S + A) R_PPC64_TPREL16_HIGH = 112, // half16 #hi(@tprel) R_PPC64_TPREL16_HIGHA = 113, // half16 #ha(@tprel) R_PPC64_DTPREL16_HIGH = 114, // half16 #hi(@dtprel) R_PPC64_DTPREL16_HIGHA = 115, // half16 #ha(@dtprel) R_PPC64_REL24_NOTOC = 116, // low24* (S + A - P) >> 2 R_PPC64_ADDR64_LOCAL = 117, // doubleword64 S + A (see 3.5.4) #endif R_PPC64_JMP_IREL = 247, // GNU extension to support local ifunc // The PPC 64-Bit ELF V2 ABI R_PPC64_IRELATIVE = 248, // It is used to implement the // STT_GNU_IFUNC framework R_PPC64_REL16 = R_PPC_REL16, // half16* S + A - P R_PPC64_REL16_LO = R_PPC_REL16_LO, // half16 #lo(S + A - P) R_PPC64_REL16_HI = R_PPC_REL16_HI, // half16* #hi(S + A - P) R_PPC64_REL16_HA = R_PPC_REL16_HA, // half16* #la(S + A - P) }; // flags for VLE code #define SHF_PPC_VLE 0x10000000 /* section header flag */ #define PF_PPC_VLE 0x10000000 /* program header flag */ // patching GOT loading, // discard auxiliary values in plt/got // can present offset bypass segment #define ELF_RPL_PPC_DEFAULT (ELF_RPL_GL | ELF_DIS_OFFW | ELF_DIS_GPLT) #endif