Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions llvm/include/llvm/Object/WindowsMachineFlag.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ template <typename T> Triple::ArchType getMachineArchType(T machine) {
case COFF::IMAGE_FILE_MACHINE_ARM64EC:
case COFF::IMAGE_FILE_MACHINE_ARM64X:
return llvm::Triple::ArchType::aarch64;
case COFF::IMAGE_FILE_MACHINE_R4000:
return llvm::Triple::ArchType::mipsel;
default:
return llvm::Triple::ArchType::UnknownArch;
}
Expand Down
4 changes: 4 additions & 0 deletions llvm/include/llvm/ObjectYAML/COFFYAML.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ struct ScalarEnumerationTraits<COFF::RelocationTypeAMD64> {
static void enumeration(IO &IO, COFF::RelocationTypeAMD64 &Value);
};

template <> struct ScalarEnumerationTraits<COFF::RelocationTypesMips> {
static void enumeration(IO &IO, COFF::RelocationTypesMips &Value);
};

template <>
struct ScalarEnumerationTraits<COFF::RelocationTypesARM> {
static void enumeration(IO &IO, COFF::RelocationTypesARM &Value);
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Object/COFFObjectFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1132,6 +1132,8 @@ StringRef COFFObjectFile::getFileFormatName() const {
return "COFF-ARM64EC";
case COFF::IMAGE_FILE_MACHINE_ARM64X:
return "COFF-ARM64X";
case COFF::IMAGE_FILE_MACHINE_R4000:
return "COFF-MIPS";
default:
return "COFF-<unknown arch>";
}
Expand Down
23 changes: 23 additions & 0 deletions llvm/lib/ObjectYAML/COFFYAML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,25 @@ void ScalarEnumerationTraits<COFF::RelocationTypeAMD64>::enumeration(
ECase(IMAGE_REL_AMD64_SSPAN32);
}

void ScalarEnumerationTraits<COFF::RelocationTypesMips>::enumeration(
IO &IO, COFF::RelocationTypesMips &Value) {
ECase(IMAGE_REL_MIPS_ABSOLUTE);
ECase(IMAGE_REL_MIPS_REFHALF);
ECase(IMAGE_REL_MIPS_REFWORD);
ECase(IMAGE_REL_MIPS_JMPADDR);
ECase(IMAGE_REL_MIPS_REFHI);
ECase(IMAGE_REL_MIPS_REFLO);
ECase(IMAGE_REL_MIPS_GPREL);
ECase(IMAGE_REL_MIPS_LITERAL);
ECase(IMAGE_REL_MIPS_SECTION);
ECase(IMAGE_REL_MIPS_SECREL);
ECase(IMAGE_REL_MIPS_SECRELLO);
ECase(IMAGE_REL_MIPS_SECRELHI);
ECase(IMAGE_REL_MIPS_JMPADDR16);
ECase(IMAGE_REL_MIPS_REFWORDNB);
ECase(IMAGE_REL_MIPS_PAIR);
}

void ScalarEnumerationTraits<COFF::RelocationTypesARM>::enumeration(
IO &IO, COFF::RelocationTypesARM &Value) {
ECase(IMAGE_REL_ARM_ABSOLUTE);
Expand Down Expand Up @@ -427,6 +446,10 @@ void MappingTraits<COFFYAML::Relocation>::mapping(IO &IO,
MappingNormalization<NType<COFF::RelocationTypeAMD64>, uint16_t> NT(
IO, Rel.Type);
IO.mapRequired("Type", NT->Type);
} else if (H.Machine == COFF::IMAGE_FILE_MACHINE_R4000) {
MappingNormalization<NType<COFF::RelocationTypesMips>, uint16_t> NT(
IO, Rel.Type);
IO.mapRequired("Type", NT->Type);
} else if (H.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT) {
MappingNormalization<NType<COFF::RelocationTypesARM>, uint16_t> NT(
IO, Rel.Type);
Expand Down
39 changes: 39 additions & 0 deletions llvm/test/tools/yaml2obj/COFF/basic-mips.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-readobj --file-headers %t | FileCheck %s
# RUN: obj2yaml %t | FileCheck %s --check-prefix=ROUNDTRIP

# CHECK: Format: COFF-MIPS
# CHECK: Arch: mipsel
# CHECK: Machine: IMAGE_FILE_MACHINE_R4000 (0x166)
# CHECK: Relocations [
# CHECK: Section (1) .text {
# CHECK: 0x4 IMAGE_REL_MIPS_JMPADDR main (0)
# CHECK: }
# CHECK: ]

# ROUNDTRIP: Machine: IMAGE_FILE_MACHINE_R4000
# ROUNDTRIP: Relocations:
# ROUNDTRIP-NEXT: - VirtualAddress: 4
# ROUNDTRIP-NEXT: SymbolName: main
# ROUNDTRIP-NEXT: Type: IMAGE_REL_MIPS_JMPADDR

--- !COFF
header:
Machine: IMAGE_FILE_MACHINE_R4000
sections:
- Name: .text
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
VirtualSize: 12
SectionData: 000000000000000C00000000
Relocations:
- VirtualAddress: 4
SymbolName: main
Type: IMAGE_REL_MIPS_JMPADDR
symbols:
- Name: main
Value: 0
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
...
Loading