diff options
author | Martin Storsjo <martin@martin.st> | 2018-08-27 08:42:39 +0000 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2018-08-27 08:42:39 +0000 |
commit | 114ebf4af7a935ad17a82fba8023ed52130d8eec (patch) | |
tree | 2bbee212160ac62e0523b1876352b0db4cfe678b /llvm/lib/Object | |
parent | 92dadc0bca8027635daf28ec87cae2bbbe41990b (diff) | |
download | bcm5719-llvm-114ebf4af7a935ad17a82fba8023ed52130d8eec.tar.gz bcm5719-llvm-114ebf4af7a935ad17a82fba8023ed52130d8eec.zip |
[COFF] Expose an easier helper function for getting names for relocation types
The existing method is protected, and requires using DataRefImpl
and SmallVector.
Differential Revision: https://reviews.llvm.org/D50995
llvm-svn: 340725
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 85b1913cb23..dfb95edce92 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -1176,16 +1176,12 @@ COFFObjectFile::getRelocations(const coff_section *Sec) const { #define LLVM_COFF_SWITCH_RELOC_TYPE_NAME(reloc_type) \ case COFF::reloc_type: \ - Res = #reloc_type; \ - break; + return #reloc_type; -void COFFObjectFile::getRelocationTypeName( - DataRefImpl Rel, SmallVectorImpl<char> &Result) const { - const coff_relocation *Reloc = toRel(Rel); - StringRef Res; +StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const { switch (getMachine()) { case COFF::IMAGE_FILE_MACHINE_AMD64: - switch (Reloc->Type) { + switch (Type) { LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ABSOLUTE); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ADDR64); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ADDR32); @@ -1204,11 +1200,11 @@ void COFFObjectFile::getRelocationTypeName( LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_PAIR); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_SSPAN32); default: - Res = "Unknown"; + return "Unknown"; } break; case COFF::IMAGE_FILE_MACHINE_ARMNT: - switch (Reloc->Type) { + switch (Type) { LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ABSOLUTE); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ADDR32); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ADDR32NB); @@ -1225,11 +1221,11 @@ void COFFObjectFile::getRelocationTypeName( LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_BRANCH24T); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_BLX23T); default: - Res = "Unknown"; + return "Unknown"; } break; case COFF::IMAGE_FILE_MACHINE_ARM64: - switch (Reloc->Type) { + switch (Type) { LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ABSOLUTE); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ADDR32); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ADDR32NB); @@ -1248,11 +1244,11 @@ void COFFObjectFile::getRelocationTypeName( LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_BRANCH19); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_BRANCH14); default: - Res = "Unknown"; + return "Unknown"; } break; case COFF::IMAGE_FILE_MACHINE_I386: - switch (Reloc->Type) { + switch (Type) { LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_ABSOLUTE); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_DIR16); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_REL16); @@ -1265,17 +1261,23 @@ void COFFObjectFile::getRelocationTypeName( LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_SECREL7); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_REL32); default: - Res = "Unknown"; + return "Unknown"; } break; default: - Res = "Unknown"; + return "Unknown"; } - Result.append(Res.begin(), Res.end()); } #undef LLVM_COFF_SWITCH_RELOC_TYPE_NAME +void COFFObjectFile::getRelocationTypeName( + DataRefImpl Rel, SmallVectorImpl<char> &Result) const { + const coff_relocation *Reloc = toRel(Rel); + StringRef Res = getRelocationTypeName(Reloc->Type); + Result.append(Res.begin(), Res.end()); +} + bool COFFObjectFile::isRelocatableObject() const { return !DataDirectory; } |