[llvm] r340725 - [COFF] Expose an easier helper function for getting names for relocation types
Martin Storsjo via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 27 01:42:39 PDT 2018
Author: mstorsjo
Date: Mon Aug 27 01:42:39 2018
New Revision: 340725
URL: http://llvm.org/viewvc/llvm-project?rev=340725&view=rev
Log:
[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
Modified:
llvm/trunk/include/llvm/Object/COFF.h
llvm/trunk/lib/Object/COFFObjectFile.cpp
Modified: llvm/trunk/include/llvm/Object/COFF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFF.h?rev=340725&r1=340724&r2=340725&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/COFF.h (original)
+++ llvm/trunk/include/llvm/Object/COFF.h Mon Aug 27 01:42:39 2018
@@ -883,6 +883,7 @@ public:
assert(is64());
return reinterpret_cast<const coff_load_configuration64 *>(LoadConfig);
}
+ StringRef getRelocationTypeName(uint16_t Type) const;
protected:
void moveSymbolNext(DataRefImpl &Symb) const override;
Modified: llvm/trunk/lib/Object/COFFObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=340725&r1=340724&r2=340725&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFObjectFile.cpp Mon Aug 27 01:42:39 2018
@@ -1176,16 +1176,12 @@ COFFObjectFile::getRelocations(const cof
#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::getRelocationTypeNa
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::getRelocationTypeNa
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::getRelocationTypeNa
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::getRelocationTypeNa
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;
}
More information about the llvm-commits
mailing list