/* Additional section types. */
#define SHT_ARM_EXIDX 0x70000001 /* Section holds ARM unwind info. */
+#define SHT_ARM_PREEMPTMAP 0x70000002 /* Section pre-emption details. */
+#define SHT_ARM_ATTRIBUTES 0x70000003 /* Section holds attributes. */
/* ARM-specific values for sh_flags. */
#define SHF_ENTRYSECT 0x10000000 /* Section contains an entry point. */
RELOC_NUMBER (R_ARM_PC24, 1) /* deprecated */
RELOC_NUMBER (R_ARM_ABS32, 2)
RELOC_NUMBER (R_ARM_REL32, 3)
-#ifndef OLD_ARM_ABI
RELOC_NUMBER (R_ARM_LDR_PC_G0, 4)
RELOC_NUMBER (R_ARM_ABS16, 5)
RELOC_NUMBER (R_ARM_ABS12, 6)
RELOC_NUMBER (R_ARM_BREL_ADJ, 12)
RELOC_NUMBER (R_ARM_SWI24, 13) /* obsolete */
RELOC_NUMBER (R_ARM_THM_SWI8, 14) /* obsolete */
-#else
- 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_CALL, 8)
- RELOC_NUMBER (R_ARM_SBREL32, 9)
- RELOC_NUMBER (R_ARM_BREL_ADJ, 10)
- RELOC_NUMBER (R_ARM_THM_JUMP11, 11)
- RELOC_NUMBER (R_ARM_THM_JUMP8, 12)
- RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 13)
- RELOC_NUMBER (R_ARM_GNU_VTENTRY, 14)
-#endif
RELOC_NUMBER (R_ARM_XPC25, 15) /* obsolete */
RELOC_NUMBER (R_ARM_THM_XPC22, 16) /* obsolete */
RELOC_NUMBER (R_ARM_TLS_DTPMOD32, 17)
RELOC_NUMBER (R_ARM_GOT_BREL12, 97)
RELOC_NUMBER (R_ARM_GOTOFF12, 98)
RELOC_NUMBER (R_ARM_GOTRELAX, 99)
-#ifndef OLD_ARM_ABI
RELOC_NUMBER (R_ARM_GNU_VTENTRY, 100) /* deprecated - old C++ abi */
RELOC_NUMBER (R_ARM_GNU_VTINHERIT, 101) /* deprecated - old C++ abi */
RELOC_NUMBER (R_ARM_THM_JUMP11, 102)
RELOC_NUMBER (R_ARM_THM_JUMP8, 103)
-#endif
RELOC_NUMBER (R_ARM_TLS_GD32, 104)
RELOC_NUMBER (R_ARM_TLS_LDM32, 105)
RELOC_NUMBER (R_ARM_TLS_LDO32, 106)
FAKE_RELOC (R_ARM_GOT32, R_ARM_GOT_BREL) /* 32 bit GOT entry. */
FAKE_RELOC (R_ARM_ROSEGREL32, R_ARM_SBREL31) /* ??? */
FAKE_RELOC (R_ARM_AMP_VCALL9, R_ARM_BREL_ADJ) /* Thumb-something. Not used. */
-#ifndef OLD_ARM_ABI
FAKE_RELOC (R_ARM_PC13, R_ARM_LDR_PC_G0) /* Unclear whether meaning is different. */
-#endif
END_RELOC_NUMBERS (R_ARM_max)
+#ifdef BFD_ARCH_SIZE
+/* Routines for manipulating EABI object attributes. */
+void elf32_arm_add_eabi_attr_int (bfd *, int, unsigned int);
+void elf32_arm_add_eabi_attr_string (bfd *, int, const char *);
+void elf32_arm_add_eabi_attr_compat (bfd *, unsigned int, const char *);
+
+void elf32_arm_set_eabi_attr_contents (bfd *, bfd_byte *, bfd_vma);
+bfd_vma elf32_arm_eabi_attr_size (bfd *);
+
+enum
+{
+ Tag_NULL,
+ Tag_File,
+ Tag_Section,
+ Tag_Symbol,
+ Tag_CPU_raw_name,
+ Tag_CPU_name,
+ Tag_CPU_arch,
+ Tag_CPU_arch_profile,
+ Tag_ARM_ISA_use,
+ Tag_THUMB_ISA_use,
+ Tag_VFP_arch,
+ Tag_WMMX_arch,
+ Tag_NEON_arch,
+ Tag_PCS_config,
+ Tag_ABI_PCS_R9_use,
+ Tag_ABI_PCS_RW_data,
+ Tag_ABI_PCS_RO_data,
+ Tag_ABI_PCS_GOT_use,
+ Tag_ABI_PCS_wchar_t,
+ Tag_ABI_FP_rounding,
+ Tag_ABI_FP_denormal,
+ Tag_ABI_FP_exceptions,
+ Tag_ABI_FP_user_exceptions,
+ Tag_ABI_FP_number_model,
+ Tag_ABI_align8_needed,
+ Tag_ABI_align8_preserved,
+ Tag_ABI_enum_size,
+ Tag_ABI_HardFP_use,
+ Tag_ABI_VFP_args,
+ Tag_ABI_WMMX_args,
+ Tag_ABI_optimization_goals,
+ Tag_ABI_FP_optimization_goals,
+ Tag_compatibility,
+};
+
+#endif
+
/* The name of the note section used to identify arm variants. */
#define ARM_NOTE_SECTION ".note.gnu.arm.ident"