X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=elfcpp%2Farm.h;h=6f7d4662f918c50c839e529549bcb00cef5c9763;hb=087e161b3cd9a8626dc05ce1bdb8dfaf353a71b1;hp=52b80c5a7cd918cfc8601170c26a9f88ebbfbe55;hpb=05a352e6a76d399efe20435ac617f49327fdff29;p=deliverable%2Fbinutils-gdb.git diff --git a/elfcpp/arm.h b/elfcpp/arm.h index 52b80c5a7c..6f7d4662f9 100644 --- a/elfcpp/arm.h +++ b/elfcpp/arm.h @@ -1,6 +1,6 @@ // arm.h -- ELF definitions specific to EM_ARM -*- C++ -*- -// Copyright 2009, Free Software Foundation, Inc. +// Copyright (C) 2009-2020 Free Software Foundation, Inc. // Written by Doug Kwan . // This file is part of elfcpp. @@ -192,11 +192,17 @@ enum R_ARM_PRIVATE_14 = 126, R_ARM_PRIVATE_15 = 127, R_ARM_ME_TOO = 128, // Obsolete - R_ARM_THM_TLS_DESCSEQ16 = 129,// Static Thumb16 + R_ARM_THM_TLS_DESCSEQ16 = 129,// Static Thumb16 R_ARM_THM_TLS_DESCSEQ32 = 130,// Static Thumb32 - // 131 - 139 Unallocated + // 131 - 135 Unallocated + // Relocations for Armv8.1-M Mainline (BF/BFL) + R_ARM_THM_BF16 = 136, // Static Thumb32 ((S + A) | T) – P + R_ARM_THM_BF12 = 137, // Static Thumb32 ((S + A) | T) – P + R_ARM_THM_BF18 = 138, // Static Thumb32 ((S + A) | T) – P + // 139 Unallocated // 140 - 159 Dynamic Reserved for future allocation - // 160 - 255 Unallocated + R_ARM_IRELATIVE = 160, // Dynamic + // 161 - 255 Unallocated }; // e_flags values used for ARM. We only support flags defined in AAELF. @@ -222,6 +228,14 @@ inline Elf_Word arm_eabi_version(Elf_Word flags) { return flags & EF_ARM_EABIMASK; } +// EABI_VER5 e_flags values for identifying soft- and hard-float ABI +// choice. +enum +{ + EF_ARM_ABI_FLOAT_SOFT = 0x200, + EF_ARM_ABI_FLOAT_HARD = 0x400, +}; + // Values for the Tag_CPU_arch EABI attribute. enum { @@ -239,12 +253,126 @@ enum TAG_CPU_ARCH_V6_M, TAG_CPU_ARCH_V6S_M, TAG_CPU_ARCH_V7E_M, - MAX_TAG_CPU_ARCH = TAG_CPU_ARCH_V7E_M, + TAG_CPU_ARCH_V8, + MAX_TAG_CPU_ARCH = TAG_CPU_ARCH_V8, // Pseudo-architecture to allow objects to be compatible with the subset of // armv4t and armv6-m. This value should never be stored in object files. TAG_CPU_ARCH_V4T_PLUS_V6_M = (MAX_TAG_CPU_ARCH + 1) }; +// EABI object attributes. +enum +{ + // 0-3 are generic. + Tag_CPU_raw_name = 4, + Tag_CPU_name = 5, + Tag_CPU_arch = 6, + Tag_CPU_arch_profile = 7, + Tag_ARM_ISA_use = 8, + Tag_THUMB_ISA_use = 9, + Tag_FP_arch = 10, + Tag_WMMX_arch = 11, + Tag_Advanced_SIMD_arch = 12, + Tag_PCS_config = 13, + Tag_ABI_PCS_R9_use = 14, + Tag_ABI_PCS_RW_data = 15, + Tag_ABI_PCS_RO_data = 16, + Tag_ABI_PCS_GOT_use = 17, + Tag_ABI_PCS_wchar_t = 18, + Tag_ABI_FP_rounding = 19, + Tag_ABI_FP_denormal = 20, + Tag_ABI_FP_exceptions = 21, + Tag_ABI_FP_user_exceptions = 22, + Tag_ABI_FP_number_model = 23, + Tag_ABI_align_needed = 24, + Tag_ABI_align_preserved = 25, + Tag_ABI_enum_size = 26, + Tag_ABI_HardFP_use = 27, + Tag_ABI_VFP_args = 28, + Tag_ABI_WMMX_args = 29, + Tag_ABI_optimization_goals = 30, + Tag_ABI_FP_optimization_goals = 31, + // 32 is generic (Tag_compatibility). + Tag_undefined33 = 33, + Tag_CPU_unaligned_access = 34, + Tag_undefined35 = 35, + Tag_FP_HP_extension = 36, + Tag_undefined37 = 37, + Tag_ABI_FP_16bit_format = 38, + Tag_undefined39 = 39, + Tag_undefined40 = 40, + Tag_undefined41 = 41, + Tag_MPextension_use = 42, + Tag_undefined43 = 43, + Tag_DIV_use = 44, + Tag_MVE_arch = 48, + Tag_nodefaults = 64, + Tag_also_compatible_with = 65, + Tag_T2EE_use = 66, + Tag_conformance = 67, + Tag_Virtualization_use = 68, + Tag_undefined69 = 69, + Tag_MPextension_use_legacy = 70, + + // The following tags are legacy names for other tags. + Tag_VFP_arch = Tag_FP_arch, + Tag_ABI_align8_needed = Tag_ABI_align_needed, + Tag_ABI_align8_preserved = Tag_ABI_align_preserved, + Tag_VFP_HP_extension = Tag_FP_HP_extension +}; + +// Values for Tag_ABI_PCS_R9_use. +enum +{ + AEABI_R9_V6 = 0, + AEABI_R9_SB = 1, + AEABI_R9_TLS = 2, + AEABI_R9_unused = 3 +}; + +// Values for Tag_ABI_PCS_RW_data. +enum +{ + AEABI_PCS_RW_data_absolute = 0, + AEABI_PCS_RW_data_PCrel = 1, + AEABI_PCS_RW_data_SBrel = 2, + AEABI_PCS_RW_data_unused = 3 +}; + +// Values for Tag_ABI_enum_size. +enum +{ + AEABI_enum_unused = 0, + AEABI_enum_short = 1, + AEABI_enum_wide = 2, + AEABI_enum_forced_wide = 3 +}; + +// Values for Tag_ABI_FP_number_model. +enum +{ + AEABI_FP_number_model_none = 0, + AEABI_FP_number_model_ieee754_number = 1, + AEABI_FP_number_model_rtabi = 2, + AEABI_FP_number_model_ieee754_all = 3 +}; + +// Values for Tag_ABI_VFP_args. +enum +{ + AEABI_VFP_args_base = 0, + AEABI_VFP_args_vfp = 1, + AEABI_VFP_args_toolchain = 2, + AEABI_VFP_args_compatible = 3 +}; + +// For Exception Index Table. (Exception handling ABI for the ARM +// architectue, Section 5) +enum +{ + EXIDX_CANTUNWIND = 1, +}; + } // End namespace elfcpp. #endif // !defined(ELFCPP_ARM_H)