1*9880d681SAndroid Build Coastguard Worker //===--- ARMAttributeParser.h - ARM Attribute Information Printer ---------===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_TOOLS_LLVM_READOBJ_ARMATTRIBUTEPARSER_H 11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVM_READOBJ_ARMATTRIBUTEPARSER_H 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ARMBuildAttributes.h" 14*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ScopedPrinter.h" 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker namespace llvm { 17*9880d681SAndroid Build Coastguard Worker class StringRef; 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker class ARMAttributeParser { 20*9880d681SAndroid Build Coastguard Worker ScopedPrinter &SW; 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker struct DisplayHandler { 23*9880d681SAndroid Build Coastguard Worker ARMBuildAttrs::AttrType Attribute; 24*9880d681SAndroid Build Coastguard Worker void (ARMAttributeParser::*Routine)(ARMBuildAttrs::AttrType, 25*9880d681SAndroid Build Coastguard Worker const uint8_t *, uint32_t &); 26*9880d681SAndroid Build Coastguard Worker }; 27*9880d681SAndroid Build Coastguard Worker static const DisplayHandler DisplayRoutines[]; 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker uint64_t ParseInteger(const uint8_t *Data, uint32_t &Offset); 30*9880d681SAndroid Build Coastguard Worker StringRef ParseString(const uint8_t *Data, uint32_t &Offset); 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker void IntegerAttribute(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 33*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 34*9880d681SAndroid Build Coastguard Worker void StringAttribute(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 35*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker void PrintAttribute(unsigned Tag, unsigned Value, StringRef ValueDesc); 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker void CPU_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 40*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 41*9880d681SAndroid Build Coastguard Worker void CPU_arch_profile(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 42*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 43*9880d681SAndroid Build Coastguard Worker void ARM_ISA_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 44*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 45*9880d681SAndroid Build Coastguard Worker void THUMB_ISA_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 46*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 47*9880d681SAndroid Build Coastguard Worker void FP_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 48*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 49*9880d681SAndroid Build Coastguard Worker void WMMX_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 50*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 51*9880d681SAndroid Build Coastguard Worker void Advanced_SIMD_arch(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 52*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 53*9880d681SAndroid Build Coastguard Worker void PCS_config(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 54*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 55*9880d681SAndroid Build Coastguard Worker void ABI_PCS_R9_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 56*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 57*9880d681SAndroid Build Coastguard Worker void ABI_PCS_RW_data(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 58*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 59*9880d681SAndroid Build Coastguard Worker void ABI_PCS_RO_data(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 60*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 61*9880d681SAndroid Build Coastguard Worker void ABI_PCS_GOT_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 62*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 63*9880d681SAndroid Build Coastguard Worker void ABI_PCS_wchar_t(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 64*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 65*9880d681SAndroid Build Coastguard Worker void ABI_FP_rounding(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 66*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 67*9880d681SAndroid Build Coastguard Worker void ABI_FP_denormal(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 68*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 69*9880d681SAndroid Build Coastguard Worker void ABI_FP_exceptions(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 70*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 71*9880d681SAndroid Build Coastguard Worker void ABI_FP_user_exceptions(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 72*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 73*9880d681SAndroid Build Coastguard Worker void ABI_FP_number_model(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 74*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 75*9880d681SAndroid Build Coastguard Worker void ABI_align_needed(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 76*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 77*9880d681SAndroid Build Coastguard Worker void ABI_align_preserved(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 78*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 79*9880d681SAndroid Build Coastguard Worker void ABI_enum_size(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 80*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 81*9880d681SAndroid Build Coastguard Worker void ABI_HardFP_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 82*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 83*9880d681SAndroid Build Coastguard Worker void ABI_VFP_args(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 84*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 85*9880d681SAndroid Build Coastguard Worker void ABI_WMMX_args(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 86*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 87*9880d681SAndroid Build Coastguard Worker void ABI_optimization_goals(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 88*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 89*9880d681SAndroid Build Coastguard Worker void ABI_FP_optimization_goals(ARMBuildAttrs::AttrType Tag, 90*9880d681SAndroid Build Coastguard Worker const uint8_t *Data, uint32_t &Offset); 91*9880d681SAndroid Build Coastguard Worker void compatibility(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 92*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 93*9880d681SAndroid Build Coastguard Worker void CPU_unaligned_access(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 94*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 95*9880d681SAndroid Build Coastguard Worker void FP_HP_extension(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 96*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 97*9880d681SAndroid Build Coastguard Worker void ABI_FP_16bit_format(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 98*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 99*9880d681SAndroid Build Coastguard Worker void MPextension_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 100*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 101*9880d681SAndroid Build Coastguard Worker void DIV_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 102*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 103*9880d681SAndroid Build Coastguard Worker void DSP_extension(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 104*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 105*9880d681SAndroid Build Coastguard Worker void T2EE_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 106*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 107*9880d681SAndroid Build Coastguard Worker void Virtualization_use(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 108*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 109*9880d681SAndroid Build Coastguard Worker void nodefaults(ARMBuildAttrs::AttrType Tag, const uint8_t *Data, 110*9880d681SAndroid Build Coastguard Worker uint32_t &Offset); 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker void ParseAttributeList(const uint8_t *Data, uint32_t &Offset, 113*9880d681SAndroid Build Coastguard Worker uint32_t Length); 114*9880d681SAndroid Build Coastguard Worker void ParseIndexList(const uint8_t *Data, uint32_t &Offset, 115*9880d681SAndroid Build Coastguard Worker SmallVectorImpl<uint8_t> &IndexList); 116*9880d681SAndroid Build Coastguard Worker void ParseSubsection(const uint8_t *Data, uint32_t Length); 117*9880d681SAndroid Build Coastguard Worker public: ARMAttributeParser(ScopedPrinter & SW)118*9880d681SAndroid Build Coastguard Worker ARMAttributeParser(ScopedPrinter &SW) : SW(SW) {} 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker void Parse(ArrayRef<uint8_t> Section); 121*9880d681SAndroid Build Coastguard Worker }; 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker } 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker #endif 126*9880d681SAndroid Build Coastguard Worker 127