Skip to content

Commit 114ebf4

Browse files
committed
[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
1 parent 92dadc0 commit 114ebf4

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

llvm/include/llvm/Object/COFF.h

+1
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,7 @@ class COFFObjectFile : public ObjectFile {
883883
assert(is64());
884884
return reinterpret_cast<const coff_load_configuration64 *>(LoadConfig);
885885
}
886+
StringRef getRelocationTypeName(uint16_t Type) const;
886887

887888
protected:
888889
void moveSymbolNext(DataRefImpl &Symb) const override;

llvm/lib/Object/COFFObjectFile.cpp

+18-16
Original file line numberDiff line numberDiff line change
@@ -1176,16 +1176,12 @@ COFFObjectFile::getRelocations(const coff_section *Sec) const {
11761176

11771177
#define LLVM_COFF_SWITCH_RELOC_TYPE_NAME(reloc_type) \
11781178
case COFF::reloc_type: \
1179-
Res = #reloc_type; \
1180-
break;
1179+
return #reloc_type;
11811180

1182-
void COFFObjectFile::getRelocationTypeName(
1183-
DataRefImpl Rel, SmallVectorImpl<char> &Result) const {
1184-
const coff_relocation *Reloc = toRel(Rel);
1185-
StringRef Res;
1181+
StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const {
11861182
switch (getMachine()) {
11871183
case COFF::IMAGE_FILE_MACHINE_AMD64:
1188-
switch (Reloc->Type) {
1184+
switch (Type) {
11891185
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ABSOLUTE);
11901186
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ADDR64);
11911187
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ADDR32);
@@ -1204,11 +1200,11 @@ void COFFObjectFile::getRelocationTypeName(
12041200
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_PAIR);
12051201
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_SSPAN32);
12061202
default:
1207-
Res = "Unknown";
1203+
return "Unknown";
12081204
}
12091205
break;
12101206
case COFF::IMAGE_FILE_MACHINE_ARMNT:
1211-
switch (Reloc->Type) {
1207+
switch (Type) {
12121208
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ABSOLUTE);
12131209
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ADDR32);
12141210
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ADDR32NB);
@@ -1225,11 +1221,11 @@ void COFFObjectFile::getRelocationTypeName(
12251221
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_BRANCH24T);
12261222
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_BLX23T);
12271223
default:
1228-
Res = "Unknown";
1224+
return "Unknown";
12291225
}
12301226
break;
12311227
case COFF::IMAGE_FILE_MACHINE_ARM64:
1232-
switch (Reloc->Type) {
1228+
switch (Type) {
12331229
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ABSOLUTE);
12341230
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ADDR32);
12351231
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ADDR32NB);
@@ -1248,11 +1244,11 @@ void COFFObjectFile::getRelocationTypeName(
12481244
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_BRANCH19);
12491245
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_BRANCH14);
12501246
default:
1251-
Res = "Unknown";
1247+
return "Unknown";
12521248
}
12531249
break;
12541250
case COFF::IMAGE_FILE_MACHINE_I386:
1255-
switch (Reloc->Type) {
1251+
switch (Type) {
12561252
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_ABSOLUTE);
12571253
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_DIR16);
12581254
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_REL16);
@@ -1265,17 +1261,23 @@ void COFFObjectFile::getRelocationTypeName(
12651261
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_SECREL7);
12661262
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_REL32);
12671263
default:
1268-
Res = "Unknown";
1264+
return "Unknown";
12691265
}
12701266
break;
12711267
default:
1272-
Res = "Unknown";
1268+
return "Unknown";
12731269
}
1274-
Result.append(Res.begin(), Res.end());
12751270
}
12761271

12771272
#undef LLVM_COFF_SWITCH_RELOC_TYPE_NAME
12781273

1274+
void COFFObjectFile::getRelocationTypeName(
1275+
DataRefImpl Rel, SmallVectorImpl<char> &Result) const {
1276+
const coff_relocation *Reloc = toRel(Rel);
1277+
StringRef Res = getRelocationTypeName(Reloc->Type);
1278+
Result.append(Res.begin(), Res.end());
1279+
}
1280+
12791281
bool COFFObjectFile::isRelocatableObject() const {
12801282
return !DataDirectory;
12811283
}

0 commit comments

Comments
 (0)