Skip to content

Commit 4e84cc9

Browse files
committed
[Object][COFF][NFC] Introduce getMachineArchType helper.
1 parent a4798bb commit 4e84cc9

File tree

3 files changed

+37
-37
lines changed

3 files changed

+37
-37
lines changed

llvm/include/llvm/Object/WindowsMachineFlag.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
#ifndef LLVM_OBJECT_WINDOWSMACHINEFLAG_H
1414
#define LLVM_OBJECT_WINDOWSMACHINEFLAG_H
1515

16+
#include "llvm/BinaryFormat/COFF.h"
17+
#include "llvm/TargetParser/Triple.h"
18+
1619
namespace llvm {
1720

1821
class StringRef;
@@ -28,6 +31,22 @@ StringRef machineToStr(COFF::MachineTypes MT);
2831
// Only returns ARMNT, ARM64, AMD64, I386, or IMAGE_FILE_MACHINE_UNKNOWN.
2932
COFF::MachineTypes getMachineType(StringRef S);
3033

34+
template <typename T> Triple::ArchType getMachineArchType(T machine) {
35+
switch (machine) {
36+
case COFF::IMAGE_FILE_MACHINE_I386:
37+
return llvm::Triple::ArchType::x86;
38+
case COFF::IMAGE_FILE_MACHINE_AMD64:
39+
return llvm::Triple::ArchType::x86_64;
40+
case COFF::IMAGE_FILE_MACHINE_ARMNT:
41+
return llvm::Triple::ArchType::thumb;
42+
case COFF::IMAGE_FILE_MACHINE_ARM64:
43+
case COFF::IMAGE_FILE_MACHINE_ARM64EC:
44+
case COFF::IMAGE_FILE_MACHINE_ARM64X:
45+
return llvm::Triple::ArchType::aarch64;
46+
default:
47+
return llvm::Triple::ArchType::UnknownArch;
48+
}
3149
}
3250

51+
} // namespace llvm
3352
#endif

llvm/lib/Object/COFFObjectFile.cpp

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,17 @@
1414
#include "llvm/ADT/StringRef.h"
1515
#include "llvm/ADT/StringSwitch.h"
1616
#include "llvm/ADT/iterator_range.h"
17-
#include "llvm/BinaryFormat/COFF.h"
1817
#include "llvm/Object/Binary.h"
1918
#include "llvm/Object/COFF.h"
2019
#include "llvm/Object/Error.h"
2120
#include "llvm/Object/ObjectFile.h"
21+
#include "llvm/Object/WindowsMachineFlag.h"
2222
#include "llvm/Support/BinaryStreamReader.h"
2323
#include "llvm/Support/Endian.h"
2424
#include "llvm/Support/Error.h"
2525
#include "llvm/Support/ErrorHandling.h"
2626
#include "llvm/Support/MathExtras.h"
2727
#include "llvm/Support/MemoryBufferRef.h"
28-
#include "llvm/TargetParser/Triple.h"
2928
#include <algorithm>
3029
#include <cassert>
3130
#include <cinttypes>
@@ -1072,20 +1071,7 @@ StringRef COFFObjectFile::getFileFormatName() const {
10721071
}
10731072

10741073
Triple::ArchType COFFObjectFile::getArch() const {
1075-
switch (getMachine()) {
1076-
case COFF::IMAGE_FILE_MACHINE_I386:
1077-
return Triple::x86;
1078-
case COFF::IMAGE_FILE_MACHINE_AMD64:
1079-
return Triple::x86_64;
1080-
case COFF::IMAGE_FILE_MACHINE_ARMNT:
1081-
return Triple::thumb;
1082-
case COFF::IMAGE_FILE_MACHINE_ARM64:
1083-
case COFF::IMAGE_FILE_MACHINE_ARM64EC:
1084-
case COFF::IMAGE_FILE_MACHINE_ARM64X:
1085-
return Triple::aarch64;
1086-
default:
1087-
return Triple::UnknownArch;
1088-
}
1074+
return getMachineArchType(getMachine());
10891075
}
10901076

10911077
Expected<uint64_t> COFFObjectFile::getStartAddress() const {
@@ -1320,8 +1306,8 @@ COFFObjectFile::getRelocations(const coff_section *Sec) const {
13201306
return #reloc_type;
13211307

13221308
StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const {
1323-
switch (getMachine()) {
1324-
case COFF::IMAGE_FILE_MACHINE_AMD64:
1309+
switch (getArch()) {
1310+
case Triple::x86_64:
13251311
switch (Type) {
13261312
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ABSOLUTE);
13271313
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_AMD64_ADDR64);
@@ -1344,7 +1330,7 @@ StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const {
13441330
return "Unknown";
13451331
}
13461332
break;
1347-
case COFF::IMAGE_FILE_MACHINE_ARMNT:
1333+
case Triple::thumb:
13481334
switch (Type) {
13491335
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ABSOLUTE);
13501336
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM_ADDR32);
@@ -1367,9 +1353,7 @@ StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const {
13671353
return "Unknown";
13681354
}
13691355
break;
1370-
case COFF::IMAGE_FILE_MACHINE_ARM64:
1371-
case COFF::IMAGE_FILE_MACHINE_ARM64EC:
1372-
case COFF::IMAGE_FILE_MACHINE_ARM64X:
1356+
case Triple::aarch64:
13731357
switch (Type) {
13741358
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ABSOLUTE);
13751359
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ADDR32);
@@ -1393,7 +1377,7 @@ StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const {
13931377
return "Unknown";
13941378
}
13951379
break;
1396-
case COFF::IMAGE_FILE_MACHINE_I386:
1380+
case Triple::x86:
13971381
switch (Type) {
13981382
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_ABSOLUTE);
13991383
LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_I386_DIR16);
@@ -1941,19 +1925,17 @@ ResourceSectionRef::getContents(const coff_resource_data_entry &Entry) {
19411925
// the expected type.
19421926
const coff_relocation &R = **RelocsForOffset.first;
19431927
uint16_t RVAReloc;
1944-
switch (Obj->getMachine()) {
1945-
case COFF::IMAGE_FILE_MACHINE_I386:
1928+
switch (Obj->getArch()) {
1929+
case Triple::x86:
19461930
RVAReloc = COFF::IMAGE_REL_I386_DIR32NB;
19471931
break;
1948-
case COFF::IMAGE_FILE_MACHINE_AMD64:
1932+
case Triple::x86_64:
19491933
RVAReloc = COFF::IMAGE_REL_AMD64_ADDR32NB;
19501934
break;
1951-
case COFF::IMAGE_FILE_MACHINE_ARMNT:
1935+
case Triple::thumb:
19521936
RVAReloc = COFF::IMAGE_REL_ARM_ADDR32NB;
19531937
break;
1954-
case COFF::IMAGE_FILE_MACHINE_ARM64:
1955-
case COFF::IMAGE_FILE_MACHINE_ARM64EC:
1956-
case COFF::IMAGE_FILE_MACHINE_ARM64X:
1938+
case Triple::aarch64:
19571939
RVAReloc = COFF::IMAGE_REL_ARM64_ADDR32NB;
19581940
break;
19591941
default:

llvm/lib/Object/WindowsResource.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "llvm/Object/WindowsResource.h"
1414
#include "llvm/Object/COFF.h"
15+
#include "llvm/Object/WindowsMachineFlag.h"
1516
#include "llvm/Support/FormatVariadic.h"
1617
#include "llvm/Support/MathExtras.h"
1718
#include "llvm/Support/ScopedPrinter.h"
@@ -978,19 +979,17 @@ void WindowsResourceCOFFWriter::writeFirstSectionRelocations() {
978979
reinterpret_cast<coff_relocation *>(BufferStart + CurrentOffset);
979980
Reloc->VirtualAddress = RelocationAddresses[i];
980981
Reloc->SymbolTableIndex = NextSymbolIndex++;
981-
switch (MachineType) {
982-
case COFF::IMAGE_FILE_MACHINE_ARMNT:
982+
switch (getMachineArchType(MachineType)) {
983+
case Triple::thumb:
983984
Reloc->Type = COFF::IMAGE_REL_ARM_ADDR32NB;
984985
break;
985-
case COFF::IMAGE_FILE_MACHINE_AMD64:
986+
case Triple::x86_64:
986987
Reloc->Type = COFF::IMAGE_REL_AMD64_ADDR32NB;
987988
break;
988-
case COFF::IMAGE_FILE_MACHINE_I386:
989+
case Triple::x86:
989990
Reloc->Type = COFF::IMAGE_REL_I386_DIR32NB;
990991
break;
991-
case COFF::IMAGE_FILE_MACHINE_ARM64:
992-
case COFF::IMAGE_FILE_MACHINE_ARM64EC:
993-
case COFF::IMAGE_FILE_MACHINE_ARM64X:
992+
case Triple::aarch64:
994993
Reloc->Type = COFF::IMAGE_REL_ARM64_ADDR32NB;
995994
break;
996995
default:

0 commit comments

Comments
 (0)