[llvm] r372377 - [yaml2obj/obj2yaml] - Do not trigger llvm_unreachable when dumping/parsing relocations and e_machine is unsupported.
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 20 02:15:37 PDT 2019
Author: grimar
Date: Fri Sep 20 02:15:36 2019
New Revision: 372377
URL: http://llvm.org/viewvc/llvm-project?rev=372377&view=rev
Log:
[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
Added:
llvm/trunk/test/tools/obj2yaml/relocation-unsupported-machine.yaml
llvm/trunk/test/tools/yaml2obj/relocation-unsupported-machine.yaml
Modified:
llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
Modified: llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/ELFYAML.cpp?rev=372377&r1=372376&r2=372377&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/ELFYAML.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/ELFYAML.cpp Fri Sep 20 02:15:36 2019
@@ -655,7 +655,8 @@ void ScalarEnumerationTraits<ELFYAML::EL
#include "llvm/BinaryFormat/ELFRelocs/PowerPC64.def"
break;
default:
- llvm_unreachable("Unsupported architecture");
+ // Nothing to do.
+ break;
}
#undef ELF_RELOC
IO.enumFallback<Hex32>(Value);
Added: llvm/trunk/test/tools/obj2yaml/relocation-unsupported-machine.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/obj2yaml/relocation-unsupported-machine.yaml?rev=372377&view=auto
==============================================================================
--- llvm/trunk/test/tools/obj2yaml/relocation-unsupported-machine.yaml (added)
+++ llvm/trunk/test/tools/obj2yaml/relocation-unsupported-machine.yaml Fri Sep 20 02:15:36 2019
@@ -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
Added: llvm/trunk/test/tools/yaml2obj/relocation-unsupported-machine.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/yaml2obj/relocation-unsupported-machine.yaml?rev=372377&view=auto
==============================================================================
--- llvm/trunk/test/tools/yaml2obj/relocation-unsupported-machine.yaml (added)
+++ llvm/trunk/test/tools/yaml2obj/relocation-unsupported-machine.yaml Fri Sep 20 02:15:36 2019
@@ -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
More information about the llvm-commits
mailing list