mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
[yaml2obj/obj2yaml] - Allow setting an arbitrary values for e_machine.
Currently we only allow using a known named constants for `Machine` field in YAML documents. This patch allows using any numbers (valid or "unknown") and adds test cases for current and new functionality. With this it is possible to write a test cases for really unknown EM_* targets. Differential revision: https://reviews.llvm.org/D67652 llvm-svn: 372108
This commit is contained in:
parent
cb51100751
commit
3a4453bb6f
@ -221,6 +221,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_EM>::enumeration(
|
||||
ECase(EM_LANAI);
|
||||
ECase(EM_BPF);
|
||||
#undef ECase
|
||||
IO.enumFallback<Hex16>(Value);
|
||||
}
|
||||
|
||||
void ScalarEnumerationTraits<ELFYAML::ELF_ELFCLASS>::enumeration(
|
||||
|
39
test/tools/obj2yaml/elf-emachine.yaml
Normal file
39
test/tools/obj2yaml/elf-emachine.yaml
Normal file
@ -0,0 +1,39 @@
|
||||
## Check how obj2yaml dumps e_machine field.
|
||||
|
||||
## Check it dumps an unknown e_machine as a number.
|
||||
|
||||
# RUN: yaml2obj --docnum=1 %s -o %t1
|
||||
# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=UNKNOWN
|
||||
|
||||
# UNKNOWN: --- !ELF
|
||||
# UNKNOWN-NEXT: FileHeader:
|
||||
# UNKNOWN-NEXT: Class: ELFCLASS64
|
||||
# UNKNOWN-NEXT: Data: ELFDATA2MSB
|
||||
# UNKNOWN-NEXT: Type: ET_REL
|
||||
# UNKNOWN-NEXT: Machine: 0x1234
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2MSB
|
||||
Type: ET_REL
|
||||
Machine: 0x1234
|
||||
|
||||
## Check it dumps a known e_machine value as an enum string.
|
||||
|
||||
# RUN: yaml2obj --docnum=2 %s -o %t2
|
||||
# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=KNOWN
|
||||
|
||||
# KNOWN: --- !ELF
|
||||
# KNOWN-NEXT: FileHeader:
|
||||
# KNOWN-NEXT: Class: ELFCLASS64
|
||||
# KNOWN-NEXT: Data: ELFDATA2MSB
|
||||
# KNOWN-NEXT: Type: ET_REL
|
||||
# KNOWN-NEXT: Machine: EM_NONE
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2MSB
|
||||
Type: ET_REL
|
||||
Machine: 0
|
55
test/tools/yaml2obj/elf-emachine.yaml
Normal file
55
test/tools/yaml2obj/elf-emachine.yaml
Normal file
@ -0,0 +1,55 @@
|
||||
## Test how the Machine YAML field can be used to set the e_machine ELF header field.
|
||||
|
||||
## Test we can use an arbitrary value.
|
||||
|
||||
# RUN: yaml2obj --docnum=1 %s -o %t1
|
||||
# RUN: llvm-readelf %t1 --file-headers | FileCheck %s --check-prefix=UNKNOWN
|
||||
|
||||
# UNKNOWN: Machine: 1234
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2MSB
|
||||
Type: ET_REL
|
||||
Machine: 0x1234
|
||||
|
||||
## Test we can't use a number that doesn't fit into 2 bytes.
|
||||
|
||||
# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=ERR
|
||||
|
||||
# ERR: error: out of range hex16 number
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2MSB
|
||||
Type: ET_REL
|
||||
Machine: 0x12345
|
||||
|
||||
## Test we can use a known named constant.
|
||||
|
||||
# RUN: yaml2obj --docnum=3 %s -o %t3
|
||||
# RUN: llvm-readelf %t3 --file-headers | FileCheck %s --check-prefix=NONE
|
||||
|
||||
# NONE: Machine: None
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2MSB
|
||||
Type: ET_REL
|
||||
Machine: EM_NONE
|
||||
|
||||
## Test we can't use an unknown string constant.
|
||||
|
||||
# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=ERR2
|
||||
|
||||
# ERR2: error: invalid hex16 number
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2MSB
|
||||
Type: ET_REL
|
||||
Machine: EM_UNKNOWN_FOO
|
Loading…
Reference in New Issue
Block a user