mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 18:56:43 +00:00
[llvm-lib] Handle MIPS architecture (#121254)
- add a test to check values for /machine argument - add a test to check if machine is correctly inferred from inputs
This commit is contained in:
parent
6f69f8c9fe
commit
c983ae8f26
@ -21,6 +21,7 @@ using namespace llvm;
|
||||
|
||||
// Returns /machine's value.
|
||||
COFF::MachineTypes llvm::getMachineType(StringRef S) {
|
||||
// Flags must be a superset of Microsoft lib.exe /machine flags.
|
||||
return StringSwitch<COFF::MachineTypes>(S.lower())
|
||||
.Cases("x64", "amd64", COFF::IMAGE_FILE_MACHINE_AMD64)
|
||||
.Cases("x86", "i386", COFF::IMAGE_FILE_MACHINE_I386)
|
||||
@ -28,6 +29,7 @@ COFF::MachineTypes llvm::getMachineType(StringRef S) {
|
||||
.Case("arm64", COFF::IMAGE_FILE_MACHINE_ARM64)
|
||||
.Case("arm64ec", COFF::IMAGE_FILE_MACHINE_ARM64EC)
|
||||
.Case("arm64x", COFF::IMAGE_FILE_MACHINE_ARM64X)
|
||||
.Case("mips", COFF::IMAGE_FILE_MACHINE_R4000)
|
||||
.Default(COFF::IMAGE_FILE_MACHINE_UNKNOWN);
|
||||
}
|
||||
|
||||
|
@ -171,6 +171,7 @@ static Expected<COFF::MachineTypes> getCOFFFileMachine(MemoryBufferRef MB) {
|
||||
uint16_t Machine = (*Obj)->getMachine();
|
||||
if (Machine != COFF::IMAGE_FILE_MACHINE_I386 &&
|
||||
Machine != COFF::IMAGE_FILE_MACHINE_AMD64 &&
|
||||
Machine != COFF::IMAGE_FILE_MACHINE_R4000 &&
|
||||
Machine != COFF::IMAGE_FILE_MACHINE_ARMNT && !COFF::isAnyArm64(Machine)) {
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
"unknown machine: " + std::to_string(Machine));
|
||||
@ -195,6 +196,8 @@ static Expected<COFF::MachineTypes> getBitcodeFileMachine(MemoryBufferRef MB) {
|
||||
case Triple::aarch64:
|
||||
return T.isWindowsArm64EC() ? COFF::IMAGE_FILE_MACHINE_ARM64EC
|
||||
: COFF::IMAGE_FILE_MACHINE_ARM64;
|
||||
case Triple::mipsel:
|
||||
return COFF::IMAGE_FILE_MACHINE_R4000;
|
||||
default:
|
||||
return createStringError(inconvertibleErrorCode(),
|
||||
"unknown arch in target triple: " + *TripleStr);
|
||||
|
7
llvm/test/tools/llvm-lib/Inputs/mips.ll
Normal file
7
llvm/test/tools/llvm-lib/Inputs/mips.ll
Normal file
@ -0,0 +1,7 @@
|
||||
target triple = "mipsel-windows-coff"
|
||||
|
||||
; Function Attrs: noinline nounwind optnone
|
||||
define dso_local void @"?f@@YAXXZ"() #0 {
|
||||
entry:
|
||||
ret void
|
||||
}
|
21
llvm/test/tools/llvm-lib/infer-machine.test
Normal file
21
llvm/test/tools/llvm-lib/infer-machine.test
Normal file
@ -0,0 +1,21 @@
|
||||
REQUIRES: mips-registered-target
|
||||
|
||||
RUN: rm -rf %t && mkdir -p %t
|
||||
|
||||
RUN: llc -mtriple=i386-windows-coff -filetype=obj -o %t/i386.obj %S/Inputs/i386.ll
|
||||
RUN: llvm-as %S/Inputs/i386.ll -o %t/i386.bc
|
||||
RUN: llvm-lib %t/i386.obj %t/i386.bc /out:%t/i386.lib
|
||||
RUN: llvm-objdump -h %t/i386.lib | FileCheck %s --check-prefix=I386
|
||||
I386: file format coff-i386
|
||||
|
||||
RUN: llc -mtriple=x86_64-windows-coff -filetype=obj -o %t/x86_64.obj %S/Inputs/x86_64.ll
|
||||
RUN: llvm-as %S/Inputs/x86_64.ll -o %t/x86_64.bc
|
||||
RUN: llvm-lib %t/x86_64.obj %t/x86_64.bc /out:%t/x86_64.lib
|
||||
RUN: llvm-objdump -h %t/x86_64.lib | FileCheck %s --check-prefix=X86_64
|
||||
X86_64: file format coff-x86-64
|
||||
|
||||
RUN: llc -mtriple=mipsel-windows-coff -filetype=obj -o %t/mips.obj %S/Inputs/mips.ll
|
||||
RUN: llvm-as %S/Inputs/mips.ll -o %t/mips.bc
|
||||
RUN: llvm-lib %t/mips.obj %t/mips.bc /out:%t/mips.lib
|
||||
RUN: llvm-objdump -h %t/mips.lib | FileCheck %s --check-prefix=MIPS
|
||||
MIPS: file format coff-mips
|
13
llvm/test/tools/llvm-lib/machine-opt.test
Normal file
13
llvm/test/tools/llvm-lib/machine-opt.test
Normal file
@ -0,0 +1,13 @@
|
||||
RUN: rm -f %t.lib
|
||||
|
||||
RUN: llvm-lib /out:%t.lib /machine:i386 2>&1 | FileCheck --check-prefix=EMPTYWARN %s
|
||||
RUN: llvm-lib /out:%t.lib /machine:amd64 2>&1 | FileCheck --check-prefix=EMPTYWARN %s
|
||||
|
||||
RUN: llvm-lib /out:%t.lib /machine:mips 2>&1 | FileCheck --check-prefix=EMPTYWARN %s
|
||||
|
||||
RUN: llvm-lib /out:%t.lib /machine:arm 2>&1 | FileCheck --check-prefix=EMPTYWARN %s
|
||||
RUN: llvm-lib /out:%t.lib /machine:arm64 2>&1 | FileCheck --check-prefix=EMPTYWARN %s
|
||||
RUN: llvm-lib /out:%t.lib /machine:arm64x 2>&1 | FileCheck --check-prefix=EMPTYWARN %s
|
||||
|
||||
EMPTYWARN: warning: no input files, not writing output file
|
||||
|
Loading…
x
Reference in New Issue
Block a user