mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
Add support for reading ARM ELF build attributes.
Build attribute sections can now be read if they exist via ELFObjectFile, and the llvm-readobj tool has been extended with an option to dump this information if requested. Regression tests are also included which exercise these features. Also update the docs with a fixed ARM ABI link and a new link to the Addenda which provides the build attributes specification. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181009 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -51,6 +51,7 @@ public:
|
||||
virtual void printDynamicTable() LLVM_OVERRIDE;
|
||||
virtual void printNeededLibraries() LLVM_OVERRIDE;
|
||||
virtual void printProgramHeaders() LLVM_OVERRIDE;
|
||||
virtual void printARMBuildAttributes() LLVM_OVERRIDE;
|
||||
|
||||
private:
|
||||
typedef ELFObjectFile<ELFT> ELFO;
|
||||
@ -858,3 +859,65 @@ void ELFDumper<ELFT>::printProgramHeaders() {
|
||||
W.printNumber("Alignment", PI->p_align);
|
||||
}
|
||||
}
|
||||
|
||||
#define LLVM_READOBJ_ARMATTR_NUMCASE(X) case ARMBuildAttrs::X: \
|
||||
W.printNumber(" Tag_" #X, BuildAttrs.Tag_##X); \
|
||||
break; \
|
||||
|
||||
#define LLVM_READOBJ_ARMATTR_STRCASE(X) case ARMBuildAttrs::X: \
|
||||
W.printString(" Tag_" #X, BuildAttrs.Tag_##X); \
|
||||
break; \
|
||||
|
||||
template<class ELFT>
|
||||
void ELFDumper<ELFT>::printARMBuildAttributes() {
|
||||
if (Obj->getArch() != Triple::arm || !Obj->hasARMBuildAttributes())
|
||||
return;
|
||||
ARMBuildAttrs::ARMGenericBuildAttrInfo BuildAttrs;
|
||||
SmallVector<unsigned, 16> AttrsRead;
|
||||
error_code EC = Obj->readARMBuildAttributes(BuildAttrs, AttrsRead);
|
||||
if (error(EC))
|
||||
return;
|
||||
|
||||
DictScope D(W, "ARMBuildAttributes");
|
||||
|
||||
for (SmallVector<unsigned, 16>::iterator I = AttrsRead.begin(),
|
||||
E = AttrsRead.end(); I != E; ++I) {
|
||||
switch (*I) {
|
||||
LLVM_READOBJ_ARMATTR_STRCASE(CPU_name)
|
||||
LLVM_READOBJ_ARMATTR_STRCASE(CPU_raw_name)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(CPU_arch)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(CPU_arch_profile)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ARM_ISA_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(THUMB_ISA_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(FP_arch)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(WMMX_arch)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(Advanced_SIMD_arch)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(PCS_config)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_PCS_R9_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_PCS_RW_data)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_PCS_RO_data)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_PCS_GOT_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_PCS_wchar_t)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_FP_rounding)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_FP_denormal)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_FP_exceptions)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_FP_user_exceptions)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_FP_number_model)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_align8_needed)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_align8_preserved)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_enum_size)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_HardFP_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_VFP_args)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(CPU_unaligned_access)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(FP_HP_extension)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(MPextension_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(DIV_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(T2EE_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(Virtualization_use)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_optimization_goals)
|
||||
LLVM_READOBJ_ARMATTR_NUMCASE(ABI_FP_optimization_goals)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user