[llvm] a334274 - [llvm-readobj] - Add a test for --hash-table option.
Georgii Rymar via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 27 01:29:00 PST 2020
Author: Georgii Rymar
Date: 2020-01-27T12:28:21+03:00
New Revision: a33427447df06ccde496ac6d84abd6709063c6b4
URL: https://github.com/llvm/llvm-project/commit/a33427447df06ccde496ac6d84abd6709063c6b4
DIFF: https://github.com/llvm/llvm-project/commit/a33427447df06ccde496ac6d84abd6709063c6b4.diff
LOG: [llvm-readobj] - Add a test for --hash-table option.
We had no test for --hash-table in tools/llvm-readobj.
The one we had was in test/Object and checked that
it is possible to dump the hash table even when an object
doesn't have a section header table.
In this patch I created a test, moved and merged the existent one.
During moving I converted it to be YAML based to stop using the
precompiled binary.
Differential revision: https://reviews.llvm.org/D73105
Added:
llvm/test/tools/llvm-readobj/ELF/hash-table.test
Modified:
Removed:
llvm/test/Object/Inputs/no-section-table.so
llvm/test/Object/no-section-table.test
################################################################################
diff --git a/llvm/test/Object/Inputs/no-section-table.so b/llvm/test/Object/Inputs/no-section-table.so
deleted file mode 100644
index fd176ebf7ce0..000000000000
Binary files a/llvm/test/Object/Inputs/no-section-table.so and /dev/null
diff er
diff --git a/llvm/test/Object/no-section-table.test b/llvm/test/Object/no-section-table.test
deleted file mode 100644
index 9ecde4f8c369..000000000000
--- a/llvm/test/Object/no-section-table.test
+++ /dev/null
@@ -1,36 +0,0 @@
-RUN: llvm-readobj %p/Inputs/no-section-table.so -hash-table -dynamic-table \
-RUN: | FileCheck %s
-
-CHECK: DynamicSection [ (24 entries)
-CHECK: Tag Type Name/Value
-CHECK: 0x0000000000000001 NEEDED Shared library: [libc.so.6]
-CHECK: 0x000000000000000C INIT 0x4B8
-CHECK: 0x000000000000000D FINI 0x618
-CHECK: 0x0000000000000019 INIT_ARRAY 0x2006C0
-CHECK: 0x000000000000001B INIT_ARRAYSZ 8 (bytes)
-CHECK: 0x000000000000001A FINI_ARRAY 0x2006C8
-CHECK: 0x000000000000001C FINI_ARRAYSZ 8 (bytes)
-CHECK: 0x0000000000000004 HASH 0x158
-CHECK: 0x0000000000000005 STRTAB 0x2D8
-CHECK: 0x0000000000000006 SYMTAB 0x1A0
-CHECK: 0x000000000000000A STRSZ 179 (bytes)
-CHECK: 0x000000000000000B SYMENT 24 (bytes)
-CHECK: 0x0000000000000003 PLTGOT 0x2008C0
-CHECK: 0x0000000000000002 PLTRELSZ 48 (bytes)
-CHECK: 0x0000000000000014 PLTREL RELA
-CHECK: 0x0000000000000017 JMPREL 0x488
-CHECK: 0x0000000000000007 RELA 0x3C8
-CHECK: 0x0000000000000008 RELASZ 192 (bytes)
-CHECK: 0x0000000000000009 RELAENT 24 (bytes)
-CHECK: 0x000000006FFFFFFE VERNEED 0x3A8
-CHECK: 0x000000006FFFFFFF VERNEEDNUM 1
-CHECK: 0x000000006FFFFFF0 VERSYM 0x38C
-CHECK: 0x000000006FFFFFF9 RELACOUNT 3
-CHECK: 0x0000000000000000 NULL 0x0
-CHECK: ]
-CHECK: HashTable {
-CHECK: Num Buckets: 3
-CHECK: Num Chains: 13
-CHECK: Buckets: [12, 10, 11]
-CHECK: Chains: [0, 0, 0, 0, 2, 3, 4, 0, 7, 5, 6, 8, 9]
-CHECK: }
diff --git a/llvm/test/tools/llvm-readobj/ELF/hash-table.test b/llvm/test/tools/llvm-readobj/ELF/hash-table.test
new file mode 100644
index 000000000000..2abfdd01baf2
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/ELF/hash-table.test
@@ -0,0 +1,117 @@
+## Check how the SHT_HASH section is dumped with --hash-table.
+
+# RUN: yaml2obj --docnum=1 %s -o %t.x64
+# RUN: yaml2obj --docnum=2 %s -o %t.x32
+
+# RUN: llvm-readobj --hash-table %t.x64 | FileCheck %s --check-prefix=HASH
+# RUN: llvm-readelf --hash-table %t.x64 | FileCheck %s --check-prefix=HASH
+
+# RUN: llvm-readobj --hash-table %t.x32 | FileCheck %s --check-prefix=HASH
+# RUN: llvm-readelf --hash-table %t.x32 | FileCheck %s --check-prefix=HASH
+
+# HASH: HashTable {
+# HASH-NEXT: Num Buckets: 2
+# HASH-NEXT: Num Chains: 3
+# HASH-NEXT: Buckets: [1, 2]
+# HASH-NEXT: Chains: [3, 4, 5]
+# HASH-NEXT: }
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Flags: [ SHF_ALLOC ]
+ Bucket: [ 1, 2 ]
+ Chain: [ 3, 4, 5 ]
+ - Name: .dynamic
+ Type: SHT_DYNAMIC
+ Flags: [ SHF_ALLOC ]
+ Entries:
+ - Tag: DT_HASH
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ProgramHeaders:
+ - Type: PT_LOAD
+ Sections:
+ - Section: .hash
+ - Section: .dynamic
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Flags: [ SHF_ALLOC ]
+ Bucket: [ 1, 2 ]
+ Chain: [ 3, 4, 5 ]
+ - Name: .dynamic
+ Type: SHT_DYNAMIC
+ Flags: [ SHF_ALLOC ]
+ Entries:
+ - Tag: DT_HASH
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ProgramHeaders:
+ - Type: PT_LOAD
+ Sections:
+ - Section: .hash
+ - Section: .dynamic
+
+## Check we can dump the SHT_HASH section even when an object
+## does not have the section header table.
+
+# RUN: yaml2obj --docnum=3 %s -o %t.noshdr
+# RUN: llvm-readobj --hash-table %t.noshdr | FileCheck %s --check-prefix=NOSHDR
+# RUN: llvm-readelf --hash-table %t.noshdr | FileCheck %s --check-prefix=NOSHDR
+
+# NOSHDR: HashTable {
+# NOSHDR-NEXT: Num Buckets: 1
+# NOSHDR-NEXT: Num Chains: 1
+# NOSHDR-NEXT: Buckets: [0]
+# NOSHDR-NEXT: Chains: [1]
+# NOSHDR-NEXT: }
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+## We simulate no section header table by
+## overriding the ELF header properties.
+ SHOff: 0x0
+ SHNum: 0x0
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Flags: [ SHF_ALLOC ]
+ Bucket: [ 0 ]
+ Chain: [ 1 ]
+ - Name: .dynamic
+ Type: SHT_DYNAMIC
+ Flags: [ SHF_ALLOC ]
+ Entries:
+ - Tag: DT_HASH
+ Value: 0x0
+ - Tag: DT_NULL
+ Value: 0x0
+ProgramHeaders:
+ - Type: PT_LOAD
+ Sections:
+ - Section: .hash
+ - Section: .dynamic
+ - Type: PT_DYNAMIC
+ VAddr: 0x1010
+ Sections:
+ - Section: .dynamic
More information about the llvm-commits
mailing list