summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2018-08-27 08:42:39 +0000
committerMartin Storsjo <martin@martin.st>2018-08-27 08:42:39 +0000
commit114ebf4af7a935ad17a82fba8023ed52130d8eec (patch)
tree2bbee212160ac62e0523b1876352b0db4cfe678b /llvm/lib/Object
parent92dadc0bca8027635daf28ec87cae2bbbe41990b (diff)
downloadbcm5719-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.cpp34
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;
}
OpenPOWER on IntegriCloud