[llvm] r366430 - [llvm-readelf] - Remove the precompiled binary from gnu-hash-symbols.test

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 18 05:14:37 PDT 2019


Author: grimar
Date: Thu Jul 18 05:14:36 2019
New Revision: 366430

URL: http://llvm.org/viewvc/llvm-project?rev=366430&view=rev
Log:
[llvm-readelf] - Remove the precompiled binary from gnu-hash-symbols.test

I am working on https://bugs.llvm.org/show_bug.cgi?id=42622
and this patch reworks the gnu-hash-symbols.test so that it
will be easier to expand it with x86_64 case.

Differential revision: https://reviews.llvm.org/D64750

Added:
    llvm/trunk/test/tools/llvm-readobj/elf-hash-symbols.test
Removed:
    llvm/trunk/test/tools/llvm-readobj/Inputs/dynamic-table-exe.x86
    llvm/trunk/test/tools/llvm-readobj/gnu-hash-symbols.test

Removed: llvm/trunk/test/tools/llvm-readobj/Inputs/dynamic-table-exe.x86
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/dynamic-table-exe.x86?rev=366429&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-readobj/Inputs/dynamic-table-exe.x86 (original) and llvm/trunk/test/tools/llvm-readobj/Inputs/dynamic-table-exe.x86 (removed) differ

Added: llvm/trunk/test/tools/llvm-readobj/elf-hash-symbols.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/elf-hash-symbols.test?rev=366430&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/elf-hash-symbols.test (added)
+++ llvm/trunk/test/tools/llvm-readobj/elf-hash-symbols.test Thu Jul 18 05:14:36 2019
@@ -0,0 +1,283 @@
+## Check llvm-readelf is able to dump the content of hash sections correctly.
+
+## Check the output when both .hash and .gnu.hash sections are present.
+
+# RUN: yaml2obj --docnum=1 %s -o %t1-32.so
+# RUN: llvm-readelf --hash-symbols %t1-32.so \
+# RUN:   | FileCheck %s --strict-whitespace --match-full-lines --check-prefix HASH-32
+
+# HASH-32: Symbol table of .hash for image:
+# HASH-32-NEXT:  Num Buc:    Value  Size   Type   Bind Vis      Ndx Name
+# HASH-32-NEXT:    1   0: 00000000     0 NOTYPE  GLOBAL DEFAULT UND ccc
+# HASH-32-NEXT:    5   0: 00001001     0 NOTYPE  WEAK   DEFAULT   1 bbb
+# HASH-32-NEXT:    3   0: 00000001     0 NOTYPE  GLOBAL DEFAULT ABS ddd
+# HASH-32-NEXT:    2   0: 00001000     0 NOTYPE  GLOBAL DEFAULT   1 aaa
+# HASH-32-NEXT:    4   0: 00000000     0 NOTYPE  GLOBAL DEFAULT   2 eee
+# HASH-32-EMPTY:
+# HASH-32: Symbol table of .gnu.hash for image:
+# HASH-32-NEXT:  Num Buc:    Value  Size   Type   Bind Vis      Ndx Name
+# HASH-32-NEXT:    2   1: 00001000     0 NOTYPE  GLOBAL DEFAULT   1 aaa
+# HASH-32-NEXT:    3   1: 00000001     0 NOTYPE  GLOBAL DEFAULT ABS ddd
+# HASH-32-NEXT:    4   2: 00000000     0 NOTYPE  GLOBAL DEFAULT   2 eee
+# HASH-32-NEXT:    5   2: 00001001     0 NOTYPE  WEAK   DEFAULT   1 bbb
+# HASH-32-NOT: {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  Type:    ET_DYN
+  Machine: EM_386
+Sections:
+## The contents of .hash and .gnu.hash were generated by a linker.
+  - Name:    .hash
+    Type:    SHT_HASH
+    Flags:   [ SHF_ALLOC ]
+    Link:    .dynsym
+    Content: '0300000006000000010000000000000000000000000000000500000004000000020000000000000003000000'
+  - Name:    .gnu.hash
+    Type:    SHT_GNU_HASH
+    Flags:   [ SHF_ALLOC ]
+    Link:    .dynsym
+    Content: 0300000002000000010000000500000048991200000000000200000004000000685C880B9169880BF46D880BCB60880B
+  - Name:  .dynamic
+    Type:  SHT_DYNAMIC
+    Flags: [ SHF_ALLOC ]
+    Link:  .dynstr
+    Entries:
+## PT_LOAD's p_vaddr is 0x0. PT_LOAD's p_offset = 0x1bc. DT_HASH value is 0x0. 
+## llvm-readelf will read .hash content from p_offset + (p_vaddr - DT_HASH value) = 0x1bc.
+## This matches the file offset of the .hash section.
+      - Tag:   DT_HASH
+        Value: 0x0000000000000000
+      - Tag:   DT_GNU_HASH
+## PT_LOAD's p_vaddr is 0x0. PT_LOAD's p_offset = 0x1bc. DT_GNU_HASH value is 0x2c (size of .hash = 0x2c).
+## llvm-readelf will read .gnu.hash content from p_offset + (p_vaddr - DT_GNU_HASH value) = 0x1e8.
+## This matches the file offset of the .gnu.hash section.
+        Value: 0x000000000000002C
+      - Tag:   DT_NULL
+        Value: 0x0000000000000000
+DynamicSymbols:
+  - Name:    ccc
+    Binding: STB_GLOBAL
+  - Name:    aaa
+    Section: .hash
+    Binding: STB_GLOBAL
+    Value:   0x0000000000001000
+  - Name:    ddd
+    Index:   SHN_ABS
+    Binding: STB_GLOBAL
+    Value:   0x0000000000000001
+  - Name:    eee
+    Section: .gnu.hash
+    Binding: STB_GLOBAL
+  - Name:    bbb
+    Section: .hash
+    Binding: STB_WEAK
+    Value:   0x0000000000001001
+ProgramHeaders:
+  - Type:  PT_LOAD
+    Flags: [ PF_R, PF_X ]
+    Sections:
+      - Section: .hash
+      - Section: .gnu.hash
+      - Section: .dynamic
+
+## Check the output when only .hash section is present.
+
+# RUN: yaml2obj --docnum=2 %s -o %t2-32.so
+# RUN: llvm-readelf --hash-symbols %t2-32.so \
+# RUN:   | FileCheck %s --strict-whitespace --match-full-lines --check-prefix ONLY-HASH-32
+
+# ONLY-HASH-32: Symbol table of .hash for image:
+# ONLY-HASH-32-NEXT:  Num Buc:    Value  Size   Type   Bind Vis      Ndx Name
+# ONLY-HASH-32-NEXT:    1   0: 00000000     0 NOTYPE  GLOBAL DEFAULT UND ccc
+# ONLY-HASH-32-NEXT:    5   0: 00001001     0 NOTYPE  WEAK   DEFAULT   1 bbb
+# ONLY-HASH-32-NEXT:    3   0: 00000001     0 NOTYPE  GLOBAL DEFAULT ABS ddd
+# ONLY-HASH-32-NEXT:    2   0: 00001000     0 NOTYPE  GLOBAL DEFAULT   1 aaa
+# ONLY-HASH-32-NEXT:    4   0: 00000000     0 NOTYPE  GLOBAL DEFAULT   2 eee
+# ONLY-HASH-32-NOT: {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  Type:    ET_DYN
+  Machine: EM_386
+Sections:
+## The contents of .hash was generated by a linker.
+  - Name:    .hash
+    Type:    SHT_HASH
+    Flags:   [ SHF_ALLOC ]
+    Link:    .dynsym
+    Content: '0300000006000000010000000000000000000000000000000500000004000000020000000000000003000000'
+  - Name:  .dynamic
+    Type:  SHT_DYNAMIC
+    Flags: [ SHF_ALLOC ]
+    Link:  .dynstr
+    Entries:
+      - Tag:   DT_HASH
+        Value: 0x0000000000000000
+      - Tag:   DT_NULL
+        Value: 0x0000000000000000
+DynamicSymbols:
+  - Name:    ccc
+    Binding: STB_GLOBAL
+  - Name:    aaa
+    Section: .hash
+    Binding: STB_GLOBAL
+    Value:   0x0000000000001000
+  - Name:    ddd
+    Index:   SHN_ABS
+    Binding: STB_GLOBAL
+    Value:   0x0000000000000001
+  - Name:    eee
+    Section: .dynamic
+    Binding: STB_GLOBAL
+  - Name:    bbb
+    Section: .hash
+    Binding: STB_WEAK
+    Value:   0x0000000000001001
+ProgramHeaders:
+  - Type:  PT_LOAD
+    Flags: [ PF_R, PF_X ]
+    Sections:
+      - Section: .hash
+      - Section: .dynamic
+
+## Check the output when only .gnu.hash section is present.
+
+# RUN: yaml2obj --docnum=3 %s -o %t3-32.so
+# RUN: llvm-readelf --hash-symbols %t3-32.so \
+# RUN:   | FileCheck %s --strict-whitespace --match-full-lines --check-prefix ONLY-GNUHASH-32
+
+# ONLY-GNUHASH-32: Symbol table of .gnu.hash for image:
+# ONLY-GNUHASH-32-NEXT:  Num Buc:    Value  Size   Type   Bind Vis      Ndx Name
+# ONLY-GNUHASH-32-NEXT:    2   1: 00001000     0 NOTYPE  GLOBAL DEFAULT   2 aaa
+# ONLY-GNUHASH-32-NEXT:    3   1: 00000001     0 NOTYPE  GLOBAL DEFAULT ABS ddd
+# ONLY-GNUHASH-32-NEXT:    4   2: 00000000     0 NOTYPE  GLOBAL DEFAULT   1 eee
+# ONLY-GNUHASH-32-NEXT:    5   2: 00001001     0 NOTYPE  WEAK   DEFAULT   2 bbb
+# ONLY-GNUHASH-32-NOT: {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS32
+  Data:    ELFDATA2LSB
+  Type:    ET_DYN
+  Machine: EM_386
+Sections:
+## The contents of .gnu.hash was generated by a linker.
+  - Name:    .gnu.hash
+    Type:    SHT_GNU_HASH
+    Flags:   [ SHF_ALLOC ]
+    Link:    .dynsym
+    Content: 0300000002000000010000000500000048991200000000000200000004000000685C880B9169880BF46D880BCB60880B
+  - Name:  .dynamic
+    Type:  SHT_DYNAMIC
+    Flags: [ SHF_ALLOC ]
+    Link:  .dynstr
+    Entries:
+      - Tag:   DT_GNU_HASH
+        Value: 0x0000000000000000
+      - Tag:   DT_NULL
+        Value: 0x0000000000000000
+DynamicSymbols:
+  - Name:    ccc
+    Binding: STB_GLOBAL
+  - Name:    aaa
+    Section: .dynamic
+    Binding: STB_GLOBAL
+    Value:   0x0000000000001000
+  - Name:    ddd
+    Index:   SHN_ABS
+    Binding: STB_GLOBAL
+    Value:   0x0000000000000001
+  - Name:    eee
+    Section: .gnu.hash
+    Binding: STB_GLOBAL
+  - Name:    bbb
+    Section: .dynamic
+    Binding: STB_WEAK
+    Value:   0x0000000000001001
+ProgramHeaders:
+  - Type:  PT_LOAD
+    Flags: [ PF_R, PF_X ]
+    Sections:
+      - Section: .gnu.hash
+      - Section: .dynamic
+
+## Show that if there are no hash sections, we do not print anything.
+# RUN: yaml2obj --docnum=4 %s -o %t4.so
+# RUN: llvm-readelf --hash-symbols %t4.so \
+# RUN:   | FileCheck %s --check-prefix NO-HASH --allow-empty
+
+# NO-HASH-NOT: {{.}}
+
+## Sanity check that we can still find the dynamic symbols (i.e. the above test
+## doesn't pass due to a mistake in the dynamic section).
+# RUN: llvm-readelf --dyn-symbols %t4.so | FileCheck %s --check-prefix DYNSYMS
+
+# DYNSYMS: Symbol table '.dynsym' contains 2 entries:
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_DYN
+  Machine: EM_X86_64
+Sections:
+  - Name:         .dynstr
+    Type:         SHT_STRTAB
+    Flags:        [ SHF_ALLOC ]
+    AddressAlign: 0x100
+    EntSize:      0x1
+  - Name:         .dynsym
+    Type:         SHT_DYNSYM
+    Flags:        [ SHF_ALLOC ]
+    Link:         .dynstr
+    Address:      0x100
+    AddressAlign: 0x100
+    EntSize:      0x18
+  - Name:         .dynamic
+    Type:         SHT_DYNAMIC
+    Flags:        [ SHF_ALLOC ]
+    Address:      0x0000000000001000
+    Link:         .dynstr
+    AddressAlign: 0x0000000000001000
+    EntSize:      0x0000000000000010
+    Entries:
+      - Tag:   DT_STRTAB
+        Value: 0x0000000000000000
+      - Tag:   DT_STRSZ
+        Value: 0x0000000000000009
+      - Tag:   DT_SYMTAB
+        Value: 0x0000000000000100
+      - Tag:   DT_SYMENT
+        Value: 0x0000000000000018
+      - Tag:   DT_NULL
+        Value: 0x0000000000000000
+  - Name:  .text.foo
+    Type:  SHT_PROGBITS
+    Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+    Size:  0x40
+    Address: 0x2000
+    AddressAlign: 0x2000
+DynamicSymbols:
+  - Name:    _Z3fooi
+    Binding: STB_GLOBAL
+ProgramHeaders:
+  - Type:  PT_LOAD
+    Flags: [ PF_R, PF_X ]
+    VAddr: 0x0
+    PAddr: 0x0
+    Sections:
+      - Section: .dynsym
+      - Section: .dynstr
+      - Section: .dynamic
+      - Section: .text.foo
+  - Type:  PT_DYNAMIC
+    Flags: [ PF_R ]
+    VAddr: 0x1000
+    PAddr: 0x1000
+    Sections:
+      - Section: .dynamic

Removed: llvm/trunk/test/tools/llvm-readobj/gnu-hash-symbols.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/gnu-hash-symbols.test?rev=366429&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/gnu-hash-symbols.test (original)
+++ llvm/trunk/test/tools/llvm-readobj/gnu-hash-symbols.test (removed)
@@ -1,104 +0,0 @@
-# RUN: llvm-readelf --hash-symbols %p/Inputs/dynamic-table-exe.x86 \
-# RUN:   | FileCheck %s --check-prefix HASH
-
-# HASH:     Symbol table of .hash for image:
-# HASH-NEXT:   Num Buc:    Value  Size   Type   Bind Vis      Ndx Name
-# HASH-NEXT:     9   0: 00000000     0 FUNC    GLOBAL DEFAULT UND __gxx_personality_v0 at CXXABI_1.3
-# HASH-NEXT:    13   0: 00001b64     0 NOTYPE  GLOBAL DEFAULT ABS _edata{{$}}
-# HASH-NEXT:     7   0: 00000000     0 FUNC    GLOBAL DEFAULT UND _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode at GLIBCXX_3.4
-# HASH-NEXT:     2   0: 00000000     0 NOTYPE  WEAK   DEFAULT UND _Jv_RegisterClasses{{$}}
-# HASH-NEXT:     1   0: 00000000     0 NOTYPE  WEAK   DEFAULT UND __gmon_start__{{$}}
-# HASH-NEXT:    16   1: 00000850    81 FUNC    GLOBAL DEFAULT  14 main{{$}}
-# HASH-NEXT:    10   1: 00000000     0 FUNC    GLOBAL DEFAULT UND _Unwind_Resume at GCC_3.0
-# HASH-NEXT:     8   1: 00000000     0 FUNC    GLOBAL DEFAULT UND puts at GLIBC_2.0
-# HASH-NEXT:    12   1: 00001b68     0 NOTYPE  GLOBAL DEFAULT ABS _end{{$}}
-# HASH-NEXT:     6   1: 00000000     0 FUNC    GLOBAL DEFAULT UND _ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev at GLIBCXX_3.4
-# HASH-NEXT:     5   1: 00000000     0 NOTYPE  WEAK   DEFAULT UND _ITM_registerTMCloneTable{{$}}
-# HASH-NEXT:     4   1: 00000000     0 NOTYPE  WEAK   DEFAULT UND _ITM_deregisterTMCloneTable{{$}}
-# HASH-NEXT:     3   1: 00000000     0 FUNC    GLOBAL DEFAULT UND __libc_start_main at GLIBC_2.0
-# HASH-NEXT:    11   2: 00000000     0 FUNC    WEAK   DEFAULT UND __cxa_finalize at GLIBC_2.1.3
-# HASH-NEXT:    15   2: 00001b64     0 NOTYPE  GLOBAL DEFAULT ABS __bss_start{{$}}
-# HASH-NEXT:    14   2: 0000093c     4 OBJECT  GLOBAL DEFAULT  16 _IO_stdin_used{{$}}
-# HASH:     Symbol table of .gnu.hash for image:
-# HASH-NEXT:   Num Buc:    Value  Size   Type   Bind Vis      Ndx Name
-# HASH-NEXT:    12   0: 00001b68     0 NOTYPE  GLOBAL DEFAULT ABS _end{{$}}
-# HASH-NEXT:    13   0: 00001b64     0 NOTYPE  GLOBAL DEFAULT ABS _edata{{$}}
-# HASH-NEXT:    14   1: 0000093c     4 OBJECT  GLOBAL DEFAULT  16 _IO_stdin_used{{$}}
-# HASH-NEXT:    15   1: 00001b64     0 NOTYPE  GLOBAL DEFAULT ABS __bss_start{{$}}
-# HASH-NEXT:    16   1: 00000850    81 FUNC    GLOBAL DEFAULT  14 main{{$}}
-
-## Show that if there are no hash sections, we do not print anything.
-# RUN: yaml2obj %s -o %t.o
-# RUN: llvm-readelf --hash-symbols %t.o \
-# RUN:   | FileCheck %s --check-prefix NO-HASH --allow-empty
-
-# NO-HASH-NOT: {{.}}
-
-## Sanity check that we can still find the dynamic symbols (i.e. the above test
-## doesn't pass due to a mistake in the dynamic section).
-# RUN: llvm-readelf --dyn-symbols %t.o | FileCheck %s --check-prefix DYNSYMS
-
-# DYNSYMS: Symbol table '.dynsym' contains 2 entries:
-
-!ELF
-FileHeader:
-  Class:           ELFCLASS64
-  Data:            ELFDATA2LSB
-  Type:            ET_DYN
-  Machine:         EM_X86_64
-Sections:
-  - Name:         .dynstr
-    Type:         SHT_STRTAB
-    Flags:        [ SHF_ALLOC ]
-    AddressAlign: 0x100
-    EntSize:      0x1
-  - Name:         .dynsym
-    Type:         SHT_DYNSYM
-    Flags:        [ SHF_ALLOC ]
-    Link:         .dynstr
-    Address:      0x100
-    AddressAlign: 0x100
-    EntSize:      0x18
-  - Name:            .dynamic
-    Type:            SHT_DYNAMIC
-    Flags:           [ SHF_ALLOC ]
-    Address:         0x0000000000001000
-    Link:            .dynstr
-    AddressAlign:    0x0000000000001000
-    EntSize:         0x0000000000000010
-    Entries:
-      - Tag:             DT_STRTAB
-        Value:           0x0000000000000000
-      - Tag:             DT_STRSZ
-        Value:           0x0000000000000009
-      - Tag:             DT_SYMTAB
-        Value:           0x0000000000000100
-      - Tag:             DT_SYMENT
-        Value:           0x0000000000000018
-      - Tag:             DT_NULL
-        Value:           0x0000000000000000
-  - Name:  .text.foo
-    Type:  SHT_PROGBITS
-    Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
-    Size:  0x40
-    Address: 0x2000
-    AddressAlign: 0x2000
-DynamicSymbols:
-  - Name:    _Z3fooi
-    Binding: STB_GLOBAL
-ProgramHeaders:
-  - Type:  PT_LOAD
-    Flags: [ PF_R, PF_X ]
-    VAddr: 0x0
-    PAddr: 0x0
-    Sections:
-      - Section: .dynsym
-      - Section: .dynstr
-      - Section: .dynamic
-      - Section: .text.foo
-  - Type:  PT_DYNAMIC
-    Flags: [ PF_R ]
-    VAddr: 0x1000
-    PAddr: 0x1000
-    Sections:
-      - Section: .dynamic




More information about the llvm-commits mailing list