1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00

[yaml2obj/obj2yaml] - Do not trigger llvm_unreachable when dumping/parsing relocations and e_machine is unsupported.

Currently when e_machine is set to something that is not supported by YAML lib,
then tools fail with llvm_unreachable.

In this patch I allow them to handle relocations in this case.
It can be used to dump and create objects for broken or unsupported targets.

Differential revision: https://reviews.llvm.org/D67657

llvm-svn: 372377
This commit is contained in:
George Rimar 2019-09-20 09:15:36 +00:00
parent 24419cf007
commit a52c2bff8d
3 changed files with 64 additions and 1 deletions

View File

@ -655,7 +655,8 @@ void ScalarEnumerationTraits<ELFYAML::ELF_REL>::enumeration(
#include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def"
break;
default:
llvm_unreachable("Unsupported architecture");
// Nothing to do.
break;
}
#undef ELF_RELOC
IO.enumFallback<Hex32>(Value);

View File

@ -0,0 +1,38 @@
## Show that obj2yaml is able to dump relocations when `e_machine` is unknown.
# RUN: yaml2obj %s -o %t1
# RUN: obj2yaml %t1 | FileCheck %s
# CHECK: --- !ELF
# CHECK-NEXT: FileHeader:
# CHECK-NEXT: Class: ELFCLASS64
# CHECK-NEXT: Data: ELFDATA2MSB
# CHECK-NEXT: Type: ET_REL
# CHECK-NEXT: Machine: 0x1234
# CHECK-NEXT: Sections:
# CHECK-NEXT: - Name: .rela.text
# CHECK-NEXT: Type: SHT_RELA
# CHECK-NEXT: Link: .symtab
# CHECK-NEXT: EntSize: 0x0000000000000018
# CHECK-NEXT: Relocations:
# CHECK-NEXT: - Offset: 0x0000000000000001
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: 0x00000002
# CHECK-NEXT: - Offset: 0x0000000000000003
# CHECK-NEXT: Symbol: ''
# CHECK-NEXT: Type: 0x00000004
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2MSB
Type: ET_REL
Machine: 0x1234
Sections:
- Name: .rela.text
Type: SHT_RELA
Relocations:
- Offset: 0x1
Type: 0x2
- Offset: 0x3
Type: 0x4

View File

@ -0,0 +1,24 @@
## Show that yaml2obj is able to write relocations for an unknown e_machine properly.
# RUN: yaml2obj %s -o %t1
# RUN: llvm-readelf %t1 --relocations | FileCheck %s
# CHECK: Relocation section '.rela.text' at offset 0x40 contains 2 entries:
# CHECK: Offset Info Type Symbol's Value Symbol's Name + Addend
# CHECK-NEXT: 0000000000000001 0000000000000002 Unknown 0
# CHECK-NEXT: 0000000000000003 0000000000000004 Unknown 0
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2MSB
Type: ET_REL
Machine: 0x1234
Sections:
- Name: .rela.text
Type: SHT_RELA
Relocations:
- Offset: 0x1
Type: 0x2
- Offset: 0x3
Type: 0x4