]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - include/elf/arm.h
* elf32-arm.c (elf32_arm_modify_segment_map): New function.
[thirdparty/binutils-gdb.git] / include / elf / arm.h
index 82c1698aabf1fc8cb63c18ab3c90fea8342f22fc..de3ed0664415fd18fdd9f6272d5dc82993abfa89 100644 (file)
@@ -1,5 +1,6 @@
 /* ARM ELF support for BFD.
-   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Free Software Foundation, Inc.
 
    This file is part of BFD, the Binary File Descriptor library.
 
 /* Processor specific flags for the ELF header e_flags field.  */
 #define EF_ARM_RELEXEC     0x01
 #define EF_ARM_HASENTRY    0x02
-#define EF_INTERWORK       0x04
-#define EF_APCS_26         0x08
-#define EF_APCS_FLOAT      0x10
-#define EF_PIC             0x20
-#define EF_ALIGN8         0x40         /* 8-bit structure alignment is in use */
-#define EF_NEW_ABI         0x80
-#define EF_OLD_ABI         0x100
-#define EF_SOFT_FLOAT      0x200
+#define EF_ARM_INTERWORK   0x04
+#define EF_ARM_APCS_26     0x08
+#define EF_ARM_APCS_FLOAT  0x10
+#define EF_ARM_PIC         0x20
+#define EF_ARM_ALIGN8     0x40         /* 8-bit structure alignment is in use.  */
+#define EF_ARM_NEW_ABI     0x80
+#define EF_ARM_OLD_ABI     0x100
+#define EF_ARM_SOFT_FLOAT  0x200
+#define EF_ARM_VFP_FLOAT   0x400
+#define EF_ARM_MAVERICK_FLOAT 0x800
+
+/* Frame unwind information */
+#define PT_ARM_EXIDX (PT_LOPROC + 1) 
+
+/* Other constants defined in the ARM ELF spec. version B-01.  */
+#define EF_ARM_SYMSARESORTED 0x04      /* NB conflicts with EF_INTERWORK */
+#define EF_ARM_DYNSYMSUSESEGIDX 0x08   /* NB conflicts with EF_APCS26 */
+#define EF_ARM_MAPSYMSFIRST 0x10       /* NB conflicts with EF_APCS_FLOAT */
+#define EF_ARM_EABIMASK      0xFF000000
+
+/* Constants defined in AAELF.  */
+#define EF_ARM_BE8         0x00800000
+#define EF_ARM_LE8         0x00400000
+
+#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
+#define EF_ARM_EABI_UNKNOWN  0x00000000
+#define EF_ARM_EABI_VER1     0x01000000
+#define EF_ARM_EABI_VER2     0x02000000
+#define EF_ARM_EABI_VER3     0x03000000
+#define EF_ARM_EABI_VER4     0x04000000
 
 /* Local aliases for some flags to match names used by COFF port.  */
-#define F_INTERWORK       EF_INTERWORK
-#define F_APCS26          EF_APCS_26
-#define F_APCS_FLOAT      EF_APCS_FLOAT
-#define F_PIC              EF_PIC
-#define F_SOFT_FLOAT      EF_SOFT_FLOAT
+#define F_INTERWORK       EF_ARM_INTERWORK
+#define F_APCS26          EF_ARM_APCS_26
+#define F_APCS_FLOAT      EF_ARM_APCS_FLOAT
+#define F_PIC              EF_ARM_PIC
+#define F_SOFT_FLOAT      EF_ARM_SOFT_FLOAT
+#define F_VFP_FLOAT       EF_ARM_VFP_FLOAT
+
+/* Additional symbol types for Thumb.  */
+#define STT_ARM_TFUNC      STT_LOPROC   /* A Thumb function.  */
+#define STT_ARM_16BIT      STT_HIPROC   /* A Thumb label.  */
 
-/* Additional symbol types for Thumb */
-#define STT_ARM_TFUNC     0xd
+/* Additional section types.  */
+#define SHT_ARM_EXIDX     0x70000001   /* Section holds ARM unwind info.  */
 
-/* ARM-specific values for sh_flags */
-#define SHF_ENTRYSECT      0x10000000   /* Section contains an entry point */
-#define SHF_COMDEF         0x80000000   /* Section may be multiply defined in the input to a link step */
+/* ARM-specific values for sh_flags */
+#define SHF_ENTRYSECT      0x10000000   /* Section contains an entry point */
+#define SHF_COMDEF         0x80000000   /* Section may be multiply defined in the input to a link step */
 
-/* ARM-specific program header flags */
-#define PF_ARM_SB          0x10000000   /* Segment contains the location addressed by the static base */
+/* ARM-specific program header flags.  */
+#define PF_ARM_SB          0x10000000   /* Segment contains the location addressed by the static base.  */
+#define PF_ARM_PI          0x20000000   /* Segment is position-independent.  */
+#define PF_ARM_ABS         0x40000000   /* Segment must be loaded at its base address.  */
 
 /* Relocation types.  */
+
 START_RELOC_NUMBERS (elf_arm_reloc_type)
-  RELOC_NUMBER (R_ARM_NONE,         0)
-  RELOC_NUMBER (R_ARM_PC24,         1)
-  RELOC_NUMBER (R_ARM_ABS32,        2)
-  RELOC_NUMBER (R_ARM_REL32,        3)
-  RELOC_NUMBER (R_ARM_PC13,         4)
-  RELOC_NUMBER (R_ARM_ABS16,        5)
-  RELOC_NUMBER (R_ARM_ABS12,        6)
-  RELOC_NUMBER (R_ARM_THM_ABS5,     7)
-  RELOC_NUMBER (R_ARM_ABS8,         8)
-  RELOC_NUMBER (R_ARM_SBREL32,      9)
-  RELOC_NUMBER (R_ARM_THM_PC22,    10)
-  RELOC_NUMBER (R_ARM_THM_PC8,     11)
-  RELOC_NUMBER (R_ARM_AMP_VCALL9,  12)
-  RELOC_NUMBER (R_ARM_SWI24,       13)
-  RELOC_NUMBER (R_ARM_THM_SWI8,    14)
-  RELOC_NUMBER (R_ARM_XPC25,       15)
-  RELOC_NUMBER (R_ARM_THM_XPC22,   16)
-  RELOC_NUMBER (R_ARM_COPY,        20)       /* copy symbol at runtime */
-  RELOC_NUMBER (R_ARM_GLOB_DAT,    21)       /* create GOT entry */
-  RELOC_NUMBER (R_ARM_JUMP_SLOT,   22)       /* create PLT entry */
-  RELOC_NUMBER (R_ARM_RELATIVE,    23)       /* adjust by program base */
-  RELOC_NUMBER (R_ARM_GOTOFF,      24)       /* 32 bit offset to GOT */
-  RELOC_NUMBER (R_ARM_GOTPC,       25)       /* 32 bit PC relative offset to GOT */
-  RELOC_NUMBER (R_ARM_GOT32,       26)       /* 32 bit GOT entry */
-  RELOC_NUMBER (R_ARM_PLT32,       27)       /* 32 bit PLT address */
-  FAKE_RELOC   (FIRST_INVALID_RELOC1, 28)
-  FAKE_RELOC   (LAST_INVALID_RELOC1,  99)
-  RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100)
-  RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101)
-  RELOC_NUMBER (R_ARM_THM_PC11,    102)       /* cygnus extension to abi: thumb unconditional branch */
-  RELOC_NUMBER (R_ARM_THM_PC9,     103)       /* cygnus extension to abi: thumb conditional branch */
-  FAKE_RELOC   (FIRST_INVALID_RELOC2, 104)
-  FAKE_RELOC   (LAST_INVALID_RELOC2,  248)
-  RELOC_NUMBER (R_ARM_RXPC25,     249)
-  RELOC_NUMBER (R_ARM_RSBREL32,   250)
-  RELOC_NUMBER (R_ARM_THM_RPC22,  251)
-  RELOC_NUMBER (R_ARM_RREL32,     252)
-  RELOC_NUMBER (R_ARM_RABS32,     253)
-  RELOC_NUMBER (R_ARM_RPC24,      254)
-  RELOC_NUMBER (R_ARM_RBASE,      255)
-END_RELOC_NUMBERS
-
-#endif
+  RELOC_NUMBER (R_ARM_NONE,             0)
+  RELOC_NUMBER (R_ARM_PC24,             1)
+  RELOC_NUMBER (R_ARM_ABS32,            2)
+  RELOC_NUMBER (R_ARM_REL32,            3)
+#ifdef OLD_ARM_ABI
+  RELOC_NUMBER (R_ARM_ABS8,             4)
+  RELOC_NUMBER (R_ARM_ABS16,            5)
+  RELOC_NUMBER (R_ARM_ABS12,            6)
+  RELOC_NUMBER (R_ARM_THM_ABS5,         7)
+  RELOC_NUMBER (R_ARM_THM_PC22,         8)
+  RELOC_NUMBER (R_ARM_SBREL32,          9)
+  RELOC_NUMBER (R_ARM_AMP_VCALL9,      10)
+  RELOC_NUMBER (R_ARM_THM_PC11,        11)   /* Cygnus extension to abi: Thumb unconditional branch.  */
+  RELOC_NUMBER (R_ARM_THM_PC9,         12)   /* Cygnus extension to abi: Thumb conditional branch.  */
+  RELOC_NUMBER (R_ARM_GNU_VTINHERIT,   13)  
+  RELOC_NUMBER (R_ARM_GNU_VTENTRY,     14)  
+#else /* not OLD_ARM_ABI */
+  RELOC_NUMBER (R_ARM_PC13,             4)
+  RELOC_NUMBER (R_ARM_ABS16,            5)
+  RELOC_NUMBER (R_ARM_ABS12,            6)
+  RELOC_NUMBER (R_ARM_THM_ABS5,         7)
+  RELOC_NUMBER (R_ARM_ABS8,             8)
+  RELOC_NUMBER (R_ARM_SBREL32,          9)
+  RELOC_NUMBER (R_ARM_THM_PC22,        10)
+  RELOC_NUMBER (R_ARM_THM_PC8,         11)
+  RELOC_NUMBER (R_ARM_AMP_VCALL9,      12)
+  RELOC_NUMBER (R_ARM_SWI24,           13)
+  RELOC_NUMBER (R_ARM_THM_SWI8,        14)
+  RELOC_NUMBER (R_ARM_XPC25,           15)
+  RELOC_NUMBER (R_ARM_THM_XPC22,       16)
+#endif /* not OLD_ARM_ABI */
+  RELOC_NUMBER (R_ARM_COPY,            20)   /* Copy symbol at runtime.  */
+  RELOC_NUMBER (R_ARM_GLOB_DAT,        21)   /* Create GOT entry.  */
+  RELOC_NUMBER (R_ARM_JUMP_SLOT,       22)   /* Create PLT entry.  */
+  RELOC_NUMBER (R_ARM_RELATIVE,        23)   /* Adjust by program base.  */
+  RELOC_NUMBER (R_ARM_GOTOFF,          24)   /* 32 bit offset to GOT.  */
+  RELOC_NUMBER (R_ARM_GOTPC,           25)   /* 32 bit PC relative offset to GOT.  */
+  RELOC_NUMBER (R_ARM_GOT32,           26)   /* 32 bit GOT entry.  */
+  RELOC_NUMBER (R_ARM_PLT32,           27)   /* 32 bit PLT address.  */
+#ifdef OLD_ARM_ABI
+  FAKE_RELOC   (FIRST_INVALID_RELOC,   28)
+  FAKE_RELOC   (LAST_INVALID_RELOC,   249)
+#else /* not OLD_ARM_ABI */
+  RELOC_NUMBER (R_ARM_CALL,            28)
+  RELOC_NUMBER (R_ARM_JUMP24,          29)
+  FAKE_RELOC   (FIRST_INVALID_RELOC1,  30)
+  FAKE_RELOC   (LAST_INVALID_RELOC1,   31)
+  RELOC_NUMBER (R_ARM_ALU_PCREL7_0,    32)
+  RELOC_NUMBER (R_ARM_ALU_PCREL15_8,   33)
+  RELOC_NUMBER (R_ARM_ALU_PCREL23_15,  34)
+  RELOC_NUMBER (R_ARM_LDR_SBREL_11_0,  35)
+  RELOC_NUMBER (R_ARM_ALU_SBREL_19_12, 36)
+  RELOC_NUMBER (R_ARM_ALU_SBREL_27_20, 37)
+  RELOC_NUMBER (R_ARM_TARGET1,         38)
+  RELOC_NUMBER (R_ARM_ROSEGREL32,      39)
+  RELOC_NUMBER (R_ARM_V4BX,            40)
+  RELOC_NUMBER (R_ARM_TARGET2,        41)
+  RELOC_NUMBER (R_ARM_PREL31,         42)
+  FAKE_RELOC   (FIRST_INVALID_RELOC2,  43)
+  FAKE_RELOC   (LAST_INVALID_RELOC2,   94)
+  RELOC_NUMBER (R_ARM_GOT_ABS,        95)
+  RELOC_NUMBER (R_ARM_GOT_PREL,               96)
+  RELOC_NUMBER (R_ARM_GOT_BREL12,      97)
+  RELOC_NUMBER (R_ARM_GOTOFF12,               98)
+  RELOC_NUMBER (R_ARM_GOTRELAX,               99)
+  RELOC_NUMBER (R_ARM_GNU_VTENTRY,    100)
+  RELOC_NUMBER (R_ARM_GNU_VTINHERIT,  101)
+  RELOC_NUMBER (R_ARM_THM_PC11,       102)   /* Cygnus extension to abi: Thumb unconditional branch.  */
+  RELOC_NUMBER (R_ARM_THM_PC9,        103)   /* Cygnus extension to abi: Thumb conditional branch.  */
+  FAKE_RELOC   (FIRST_INVALID_RELOC3, 104)
+  FAKE_RELOC   (LAST_INVALID_RELOC3,  248)
+  RELOC_NUMBER (R_ARM_RXPC25,         249)
+#endif /* not OLD_ARM_ABI */
+  RELOC_NUMBER (R_ARM_RSBREL32,       250)
+  RELOC_NUMBER (R_ARM_THM_RPC22,      251)
+  RELOC_NUMBER (R_ARM_RREL32,         252)
+  RELOC_NUMBER (R_ARM_RABS32,         253)
+  RELOC_NUMBER (R_ARM_RPC24,          254)
+  RELOC_NUMBER (R_ARM_RBASE,          255)
+END_RELOC_NUMBERS (R_ARM_max)
+
+/* The name of the note section used to identify arm variants.  */
+#define ARM_NOTE_SECTION ".note.gnu.arm.ident"
+
+/* Special section names.  */
+#define ELF_STRING_ARM_unwind           ".ARM.exidx"
+#define ELF_STRING_ARM_unwind_info      ".ARM.extab"
+#define ELF_STRING_ARM_unwind_once      ".gnu.linkonce.armexidx."
+#define ELF_STRING_ARM_unwind_info_once ".gnu.linkonce.armextab."
+
+#endif /* _ELF_ARM_H */