diff --git a/llvm/test/Object/readobj-shared-object.test b/llvm/test/Object/readobj-shared-object.test --- a/llvm/test/Object/readobj-shared-object.test +++ b/llvm/test/Object/readobj-shared-object.test @@ -1,7 +1,7 @@ -# RUN: llvm-readobj --sections --symbols --dyn-syms \ +# RUN: llvm-readobj --sections \ # RUN: %p/Inputs/shared-object-test.elf-i386 | FileCheck %s -# RUN: llvm-readobj --sections --symbols --dyn-syms \ +# RUN: llvm-readobj --sections \ # RUN: %p/Inputs/shared-object-test.elf-x86-64 | FileCheck %s # CHECK: Sections [ @@ -107,177 +107,3 @@ # CHECK: ] # CHECK: } # CHECK: ] - -# CHECK: Symbols [ -# CHECK: Symbol { -# CHECK: Name: .hash (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .hash -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .dynsym (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .dynsym -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .dynstr (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .dynstr -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .text (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .text -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .eh_frame (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .eh_frame -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .tdata (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .tdata -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .dynamic (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .dynamic -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .got.plt (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .got.plt -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .data (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .data -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: .bss (0) -# CHECK: Binding: Local -# CHECK: Type: Section -# CHECK: Section: .bss -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: shared.ll -# CHECK: Binding: Local -# CHECK: Type: File -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: local_func -# CHECK: Binding: Local -# CHECK: Type: Function -# CHECK: Section: .text -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: _GLOBAL_OFFSET_TABLE_ -# CHECK: Binding: Local -# CHECK: Type: Object -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: _DYNAMIC -# CHECK: Binding: Local -# CHECK: Type: Object -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: common_sym -# CHECK: Binding: Global -# CHECK: Type: Object -# CHECK: Section: .bss -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: tls_sym -# CHECK: Binding: Global -# CHECK: Type: TLS -# CHECK: Section: .tdata -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: defined_sym -# CHECK: Binding: Global -# CHECK: Type: Object -# CHECK: Section: .data -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: __bss_start -# CHECK: Binding: Global -# CHECK: Type: None -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: _end -# CHECK: Binding: Global -# CHECK: Type: None -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: global_func -# CHECK: Binding: Global -# CHECK: Type: Function -# CHECK: Section: .text -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: _edata -# CHECK: Binding: Global -# CHECK: Type: None -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: ] - -# CHECK: DynamicSymbols [ -# CHECK: Symbol { -# CHECK: Name: common_sym -# CHECK: Binding: Global -# CHECK: Type: Object -# CHECK: Section: .bss -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: tls_sym -# CHECK: Binding: Global -# CHECK: Type: TLS -# CHECK: Section: .tdata -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: defined_sym -# CHECK: Binding: Global -# CHECK: Type: Object -# CHECK: Section: .data -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: __bss_start -# CHECK: Binding: Global -# CHECK: Type: None -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: _end -# CHECK: Binding: Global -# CHECK: Type: None -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: global_func -# CHECK: Binding: Global -# CHECK: Type: Function -# CHECK: Section: .text -# CHECK: } -# CHECK: Symbol { -# CHECK: Name: _edata -# CHECK: Binding: Global -# CHECK: Type: None -# CHECK: Section: Absolute (0xFFF1) -# CHECK: } -# CHECK: ] diff --git a/llvm/test/tools/llvm-readobj/ELF/symbols.test b/llvm/test/tools/llvm-readobj/ELF/symbols.test --- a/llvm/test/tools/llvm-readobj/ELF/symbols.test +++ b/llvm/test/tools/llvm-readobj/ELF/symbols.test @@ -1,13 +1,28 @@ ## This is a general test for --symbols option and its aliases. ## There are also other symbols* tests that check specific things. +## For testing and behavior documenting purposes we are using ET_REL and ET_DYN inputs. +## Relocatable ELF objects are very different by nature from executables and dynamic libraries. +## They might never have dynamic symbols normally, for example, though we still want +## to document the --dyn-symbols behavior. +## There is no need to check ET_EXEC inputs because for dumpers there is no difference +## between them and ET_DYN inputs in the context of this test. + ## Case 1: Test how llvm-readobj and llvm-readelf dumps symbols. +## a) Check relocatable objects. # RUN: yaml2obj %s --docnum=1 -o %t64 # RUN: llvm-readobj --symbols %t64 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-LLVM # RUN: llvm-readelf --symbols %t64 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-GNU64 # RUN: yaml2obj %s --docnum=2 -o %t32 # RUN: llvm-readobj --symbols %t32 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-LLVM # RUN: llvm-readelf --symbols %t32 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-GNU32 +## b) Check dynamic objects. +# RUN: yaml2obj %s --docnum=3 -o %t64.so +# RUN: llvm-readobj --symbols %t64.so | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-LLVM +# RUN: llvm-readelf --symbols %t64.so | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-GNU64 +# RUN: yaml2obj %s --docnum=4 -o %t32.so +# RUN: llvm-readobj --symbols %t32.so | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-LLVM +# RUN: llvm-readelf --symbols %t32.so | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-GNU32 # SYMBOLS-LLVM:Symbols [ # SYMBOLS-LLVM-NEXT: Symbol { @@ -115,3 +130,31 @@ Value: 0x2 DynamicSymbols: - Name: zed + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Symbols: + - Name: foo + Value: 0x1 + - Name: bar + Value: 0x2 +DynamicSymbols: + - Name: zed + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_386 +Symbols: + - Name: foo + Value: 0x1 + - Name: bar + Value: 0x2 +DynamicSymbols: + - Name: zed