Files
clang-p2996/llvm/test/tools/obj2yaml/ELF/gnu-hash-section.yaml
Georgii Rymar a6436b0b3a [yaml2obj] - Make the 'Machine' key optional.
Currently we have to set 'Machine' to something in our
YAML descriptions. Usually we use 'EM_X86_64' for 64-bit targets
and 'EM_386' for 32-bit targets. At the same time, in fact, in most
cases our tests do not need a machine type and we can use
'EM_NONE'.

This is cleaner, because avoids the need of using a particular machine.

In this patch I've made the 'Machine' key optional (the default value,
when it is not specified is `EM_NONE`) and removed it (where possible)
from yaml2obj, obj2yaml and llvm-readobj tests.

There are few tests left where I decided not to remove it, because
I didn't want to touch CHECK lines or doing anything more complex
than a removing a "Machine: *" line and formatting lines around.

Differential revision: https://reviews.llvm.org/D86202
2020-08-20 11:40:51 +03:00

132 lines
4.5 KiB
YAML

## Check how obj2yaml produces SHT_GNU_HASH section descriptions.
## Check that obj2yaml uses "Header", "BloomFilter", "HashBuckets" and "HashValues"
## tags to describe a SHT_GNU_HASH section when it has content of a correct size.
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=FIELDS
# FIELDS: - Name: .gnu.hash
# FIELDS-NEXT: Type: SHT_GNU_HASH
# FIELDS-NEXT: Flags: [ SHF_ALLOC ]
# FIELDS-NEXT: Header:
# FIELDS-NEXT: SymNdx: 0x00000001
# FIELDS-NEXT: Shift2: 0x00000002
# FIELDS-NEXT: BloomFilter: [ 0x0000000000000003, 0x0000000000000004 ]
# FIELDS-NEXT: HashBuckets: [ 0x00000005, 0x00000006, 0x00000007 ]
# FIELDS-NEXT: HashValues: [ 0x00000008, 0x00000009, 0x0000000A, 0x0000000B ]
--- !ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_DYN
Sections:
- Name: .gnu.hash
Type: SHT_GNU_HASH
Flags: [ SHF_ALLOC ]
Header:
SymNdx: 0x1
Shift2: 0x2
BloomFilter: [0x3, 0x4]
HashBuckets: [0x5, 0x6, 0x7]
HashValues: [0x8, 0x9, 0xA, 0xB]
## Check how we handle broken cases.
# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=INVALID
# INVALID: - Name: .gnu.hash.tooshort
# INVALID-NEXT: Type: SHT_GNU_HASH
# INVALID-NEXT: Flags: [ SHF_ALLOC ]
# INVALID-NEXT: Content: 112233445566778899AABBCCDDEEFF
# INVALID-NEXT: - Name: .gnu.hash.empty
# INVALID-NEXT: Type: SHT_GNU_HASH
# INVALID-NEXT: Flags: [ SHF_ALLOC ]
# INVALID-NEXT: Address: 0x000000000000000F
# INVALID-NEXT: Header:
# INVALID-NEXT: SymNdx: 0x00000000
# INVALID-NEXT: Shift2: 0x00000000
# INVALID-NEXT: BloomFilter: [ ]
# INVALID-NEXT: HashBuckets: [ ]
# INVALID-NEXT: HashValues: [ ]
# INVALID-NEXT: - Name: .gnu.hash.broken.maskwords
# INVALID-NEXT: Type: SHT_GNU_HASH
# INVALID-NEXT: Content: '00000000000000000100000000000000'
# INVALID-NEXT: - Name: .gnu.hash.broken.nbuckets
# INVALID-NEXT: Type: SHT_GNU_HASH
# INVALID-NEXT: Content: '01000000000000000000000000000000'
# INVALID-NEXT: - Name: .gnu.hash.hashvalues.ok
# INVALID-NEXT: Type: SHT_GNU_HASH
# INVALID-NEXT: Header:
# INVALID-NEXT: SymNdx: 0x00000000
# INVALID-NEXT: Shift2: 0x00000000
# INVALID-NEXT: BloomFilter: [ ]
# INVALID-NEXT: HashBuckets: [ ]
# INVALID-NEXT: HashValues: [ 0x00000000 ]
# INVALID-NEXT: - Name: .gnu.hash.hashvalues.fail
# INVALID-NEXT: Type: SHT_GNU_HASH
# INVALID-NEXT: Content: '000000000000000000000000000000000000000000'
--- !ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_DYN
Sections:
## Case 1: Content is less than 16 bytes.
- Name: .gnu.hash.tooshort
Type: SHT_GNU_HASH
Flags: [ SHF_ALLOC ]
Content: "112233445566778899AABBCCDDEEFF"
## Case2: Check how we handle a fully empty hash section.
## It is almost technically valid, but uncommon. Modern linkers
## create at least one entry in Bloom filter if they want to disable it.
## Also, the dynamic symbol table has a null entry and having SymNdx = 0
## here is at least strange.
- Name: .gnu.hash.empty
Type: SHT_GNU_HASH
Flags: [ SHF_ALLOC ]
Header:
SymNdx: 0x0
Shift2: 0x0
MaskWords: 0x0
NBuckets: 0x0
BloomFilter: []
HashBuckets: []
HashValues: []
## Case 3: MaskWords field is broken: it says that the number of entries
## in the Bloom filter is 1, but the Bloom filter is empty.
- Name: .gnu.hash.broken.maskwords
Type: SHT_GNU_HASH
Header:
SymNdx: 0x0
Shift2: 0x0
MaskWords: 0x1
NBuckets: 0x0
BloomFilter: []
HashBuckets: []
HashValues: []
## Case 4: NBuckets field is broken, it says that the number of entries
## in the hash buckets is 1, but it is empty.
- Name: .gnu.hash.broken.nbuckets
Type: SHT_GNU_HASH
Header:
SymNdx: 0x0
Shift2: 0x0
MaskWords: 0x0
NBuckets: 0x1
BloomFilter: []
HashBuckets: []
HashValues: []
## Case 5: Check that we use the various properties to dump the data when it
## has a size that is a multiple of 4, but fallback to dumping the whole section
## using the "Content" property otherwise.
- Name: .gnu.hash.hashvalues.ok
Type: SHT_GNU_HASH
Content: "0000000000000000000000000000000000000000"
- Name: .gnu.hash.hashvalues.fail
Type: SHT_GNU_HASH
Content: "000000000000000000000000000000000000000000"