From: George Rimar Date: Fri, 20 Sep 2019 09:15:36 +0000 (+0000) Subject: [yaml2obj/obj2yaml] - Do not trigger llvm_unreachable when dumping/parsing relocation... X-Git-Tag: llvmorg-11-init~8774 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4d69967f44116b4ad4b2810633045ffed119f7c3;p=platform%2Fupstream%2Fllvm.git [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 --- diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp index 5d16f0b..161224b 100644 --- a/llvm/lib/ObjectYAML/ELFYAML.cpp +++ b/llvm/lib/ObjectYAML/ELFYAML.cpp @@ -655,7 +655,8 @@ void ScalarEnumerationTraits::enumeration( #include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def" break; default: - llvm_unreachable("Unsupported architecture"); + // Nothing to do. + break; } #undef ELF_RELOC IO.enumFallback(Value); diff --git a/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml b/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml new file mode 100644 index 0000000..e55420f --- /dev/null +++ b/llvm/test/tools/obj2yaml/relocation-unsupported-machine.yaml @@ -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 diff --git a/llvm/test/tools/yaml2obj/relocation-unsupported-machine.yaml b/llvm/test/tools/yaml2obj/relocation-unsupported-machine.yaml new file mode 100644 index 0000000..3943e64 --- /dev/null +++ b/llvm/test/tools/yaml2obj/relocation-unsupported-machine.yaml @@ -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