187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===- ARMELFAttributeData.h ----------------------------------------------===// 287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// 387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// The MCLinker Project 487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// 587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// This file is distributed under the University of Illinois Open Source 687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// License. See LICENSE.TXT for details. 787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// 887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef TARGET_ARM_ARMELFATTRIBUTEDATA_H_ 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define TARGET_ARM_ARMELFATTRIBUTEDATA_H_ 1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Target/ELFAttributeData.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Target/ELFAttributeValue.h" 1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <map> 1687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <string> 1787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesnamespace mcld { 1987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/** \class ARMELFAttributeData 2187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines * \brief ARMELFAttributeData handles public ("aeabi") attributes subsection in 2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines * ARM ELF. 2387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines * 2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines */ 2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass ARMELFAttributeData : public ELFAttributeData { 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 2787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines enum Tag { 2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // 0-3 are generic and are defined in ELFAttributeData. 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_CPU_raw_name = 4, 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_CPU_name = 5, 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_CPU_arch = 6, 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_CPU_arch_profile = 7, 3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ARM_ISA_use = 8, 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_THUMB_ISA_use = 9, 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_FP_arch = 10, 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_WMMX_arch = 11, 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_Advanced_SIMD_arch = 12, 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_PCS_config = 13, 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_PCS_R9_use = 14, 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_PCS_RW_data = 15, 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_PCS_RO_data = 16, 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_PCS_GOT_use = 17, 4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_PCS_wchar_t = 18, 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_rounding = 19, 4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_denormal = 20, 4637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_exceptions = 21, 4737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_user_exceptions = 22, 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_number_model = 23, 4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_align_needed = 24, 5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_align_preserved = 25, 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_enum_size = 26, 5237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_HardFP_use = 27, 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_VFP_args = 28, 5437b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_WMMX_args = 29, 5537b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_optimization_goals = 30, 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_optimization_goals = 31, 5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_compatibility = 32, 5837b74a387bb3993387029859c2d9d051c41c724eStephen Hines 5937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_CPU_unaligned_access = 34, 6037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_FP_HP_extension = 36, 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_FP_16bit_format = 38, 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_MPextension_use = 42, 6637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_DIV_use = 44, 6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_nodefaults = 64, 7037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_also_compatible_with = 65, 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_T2EE_use = 66, 7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_conformance = 67, 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_Virtualization_use = 68, 7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_MPextension_use_legacy = 70, 7687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 7787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Tag_Max = Tag_MPextension_use_legacy, 7887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 7987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Alias 8037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_VFP_arch = Tag_FP_arch, 8137b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_align8_needed = Tag_ABI_align_needed, 8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_ABI_align8_preserved = Tag_ABI_align_preserved, 8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Tag_VFP_HP_extension = Tag_FP_HP_extension 8487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines }; 8587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 8687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // For Tag_CPU_arch 8787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines enum { 8887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines CPU_Arch_ARM_Pre_V4, 8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V4, // e.g., SA110 9037b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V4T, // e.g., ARM7TDMI 9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V5T, // e.g., ARM9TDMI 9237b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V5TE, // e.g., ARM946E-S 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V5TEJ, // e.g., ARM926EJ-S 9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V6, // e.g., ARM1136J-S 9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V6KZ, // e.g., ARM1176JZ-S 9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V6T2, // e.g., ARM1156T2F-S 9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V6K, // e.g., ARM1136J-S 9837b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V7, // e.g., Cortex A8, Cortex M3 9937b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V6_M, // e.g., Cortex M1 10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V6S_M, // e.g., v6-M with the value of System extensions 10137b74a387bb3993387029859c2d9d051c41c724eStephen Hines CPU_Arch_ARM_V7E_M, // e.g., v7-M with DSP extensions 10287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines CPU_Arch_ARM_V8, 10387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 10487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines CPU_Arch_Max = CPU_Arch_ARM_V8, 10587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 10687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // This is a pseudo-architecture to describe an architecture mixed with 10787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // the subset of armv4t and armv6-m. This never appears in the value of 10887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Tag_CPU_arch. 10987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines CPU_Arch_ARM_V4T_Plus_V6_M = (CPU_Arch_Max + 1), 11087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 11187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines CPU_Arch_Plus_Pseudo_Max = CPU_Arch_ARM_V4T_Plus_V6_M, 11287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines }; 11387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 11487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // For Tag_CPU_arch_profile 11587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines enum { 11637b74a387bb3993387029859c2d9d051c41c724eStephen Hines Arch_Profile_None = 0, 11737b74a387bb3993387029859c2d9d051c41c724eStephen Hines Arch_Profile_Application = 'A', 11837b74a387bb3993387029859c2d9d051c41c724eStephen Hines Arch_Profile_Realtime = 'R', 11937b74a387bb3993387029859c2d9d051c41c724eStephen Hines Arch_Profile_Microcontroller = 'M', 12037b74a387bb3993387029859c2d9d051c41c724eStephen Hines Arch_Profile_RealOrApp = 'S' 12187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines }; 12287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 12387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // For Tag_ABI_enum_size 12487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines enum { 12587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Enum_Unused, 12687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Enum_Smallest_Container, 12787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Enum_32bit_Container, 12887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Enum_Containerized_As_Possible 12987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines }; 13087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 13187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // For Tag_ABI_PCS_R9_use 13237b74a387bb3993387029859c2d9d051c41c724eStephen Hines enum { R9_V6, R9_SB, R9_TLS, R9_Unused }; 13387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 13487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // For Tag_ABI_PCS_RW_data 13587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines enum { 13687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RW_data_Absolute, 13787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RW_data_PC_Relative, 13887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RW_data_SB_Relative, 13987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines RW_data_unused 14087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines }; 14187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 14237b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 14387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // ARM [ABI-addenda], 2.2.2: A public attributes subsection is named aeabi. 14487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ARMELFAttributeData() 14537b74a387bb3993387029859c2d9d051c41c724eStephen Hines : ELFAttributeData("aeabi"), 14637b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_CurrentCPUArch(-1), 14737b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_DIVUseInitialized(false), 14837b74a387bb3993387029859c2d9d051c41c724eStephen Hines m_HardFPUseInitialized(false) {} 14987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 15037b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 15137b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual const ELFAttributeValue* getAttributeValue(TagType pTag) const; 15287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 15337b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual std::pair<ELFAttributeValue*, bool> getOrCreateAttributeValue( 15437b74a387bb3993387029859c2d9d051c41c724eStephen Hines TagType pTag); 15587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 15637b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual bool preMerge(const Input& pInput) { 15787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Reset states. 15887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_CPUArch = -1; 15987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_CPUName.clear(); 16087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_CPURawName.clear(); 16187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_SecondaryCPUArch = -1; 16287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_VFPArgs = -1; 16387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_FPArch = -1; 16487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_HardFPUse = -1; 16587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_MPextensionUse = -1; 16687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines m_DIVUse = -1; 16787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines return true; 16887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines } 16987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17037b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual bool merge(const LinkerConfig& pConfig, 17137b74a387bb3993387029859c2d9d051c41c724eStephen Hines const Input& pInput, 17237b74a387bb3993387029859c2d9d051c41c724eStephen Hines TagType pTag, 17337b74a387bb3993387029859c2d9d051c41c724eStephen Hines const ELFAttributeValue& pInAttr); 17487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17537b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual bool postMerge(const LinkerConfig& pConfig, const Input& pInput); 17687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines virtual size_t sizeOutput() const; 17887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 17937b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual size_t emit(char* pBuf) const; 18087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 1810dea6bc96bb52346737966839ac68644f7939f58Stephen Hines virtual bool usingThumb() const; 1820dea6bc96bb52346737966839ac68644f7939f58Stephen Hines 1830dea6bc96bb52346737966839ac68644f7939f58Stephen Hines virtual bool usingThumb2() const; 1840dea6bc96bb52346737966839ac68644f7939f58Stephen Hines 18537b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 18687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines /// GetAttributeValueType - obtain the value type of the indicated tag. 18787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines static unsigned int GetAttributeValueType(TagType pTag); 18887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 18937b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 19087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // The storage for known tags which is indexed by the tag 19187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines ELFAttributeValue m_Attrs[Tag_Max + 1]; 19287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 19387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // The storage for unknown tags 19487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines typedef std::map<TagType, ELFAttributeValue> UnknownAttrsMap; 19587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines UnknownAttrsMap m_UnknownAttrs; 19687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 19787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // This is a cache for the current output architecture calculate from of 19887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Tag_CPU_arch and Tag_also_compatible_with. 19987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_CurrentCPUArch; 20087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 20187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Value of Tag_DIV_use and Tag_ABI_HardFP_use requires further examination 20287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // for the every time adding to the output. These booleans are initialized to 20387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // false and set to true until the corresponding attribute is initialized. 20487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool m_DIVUseInitialized; 20587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines bool m_HardFPUseInitialized; 20687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 20787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // These attributes have dependency with each other. During the merge, we 20887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // record their attribute values in the associated variables as follows and 20987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // process them in postmerge() (when all other attributes are settled down.) 21087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 21187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_CPU_arch. 21287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_CPUArch; 21387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 21487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_CPU_name. 21587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines std::string m_CPUName; 21687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 21787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_CPU_raw_name. 21887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines std::string m_CPURawName; 21987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 22087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_FP_arch. 22187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_FPArch; 22287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 22387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_ABI_HardFP_use. 22487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_HardFPUse; 22587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 22687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_also_compatible_with. 22787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_SecondaryCPUArch; 22887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 22987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_ABI_VFP_args. 23087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_VFPArgs; 23187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 23237b74a387bb3993387029859c2d9d051c41c724eStephen Hines // Record the value of input Tag_MPextension_use and 23337b74a387bb3993387029859c2d9d051c41c724eStephen Hines // Tag_MPextension_use_legacy. 23487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_MPextensionUse; 23587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 23687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines // Record the value of input Tag_DIV_use. 23787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines int m_DIVUse; 23887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines}; 23987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 24037b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 24187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines 24237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // TARGET_ARM_ARMELFATTRIBUTEDATA_H_ 243