1## This is a general test for --symbols option and its aliases.
2## There are also other symbols* tests that check specific things.
3
4## Case 1: Test how llvm-readobj and llvm-readelf dumps symbols.
5# RUN: yaml2obj %s --docnum=1 -o %t64
6# RUN: llvm-readobj --symbols %t64 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-LLVM
7# RUN: llvm-readelf --symbols %t64 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-GNU64
8# RUN: yaml2obj %s --docnum=2 -o %t32
9# RUN: llvm-readobj --symbols %t32 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-LLVM
10# RUN: llvm-readelf --symbols %t32 | FileCheck %s --match-full-lines --strict-whitespace --check-prefix=SYMBOLS-GNU32
11
12#      SYMBOLS-LLVM:Symbols [
13# SYMBOLS-LLVM-NEXT:  Symbol {
14# SYMBOLS-LLVM-NEXT:    Name:  (0)
15# SYMBOLS-LLVM-NEXT:    Value: 0x0
16# SYMBOLS-LLVM-NEXT:    Size: 0
17# SYMBOLS-LLVM-NEXT:    Binding: Local (0x0)
18# SYMBOLS-LLVM-NEXT:    Type: None (0x0)
19# SYMBOLS-LLVM-NEXT:    Other: 0
20# SYMBOLS-LLVM-NEXT:    Section: Undefined (0x0)
21# SYMBOLS-LLVM-NEXT:  }
22# SYMBOLS-LLVM-NEXT:  Symbol {
23# SYMBOLS-LLVM-NEXT:    Name: foo (5)
24# SYMBOLS-LLVM-NEXT:    Value: 0x1
25# SYMBOLS-LLVM-NEXT:    Size: 0
26# SYMBOLS-LLVM-NEXT:    Binding: Local (0x0)
27# SYMBOLS-LLVM-NEXT:    Type: None (0x0)
28# SYMBOLS-LLVM-NEXT:    Other: 0
29# SYMBOLS-LLVM-NEXT:    Section: Undefined (0x0)
30# SYMBOLS-LLVM-NEXT:  }
31# SYMBOLS-LLVM-NEXT:  Symbol {
32# SYMBOLS-LLVM-NEXT:    Name: bar (1)
33# SYMBOLS-LLVM-NEXT:    Value: 0x2
34# SYMBOLS-LLVM-NEXT:    Size: 0
35# SYMBOLS-LLVM-NEXT:    Binding: Local (0x0)
36# SYMBOLS-LLVM-NEXT:    Type: None (0x0)
37# SYMBOLS-LLVM-NEXT:    Other: 0
38# SYMBOLS-LLVM-NEXT:    Section: Undefined (0x0)
39# SYMBOLS-LLVM-NEXT:  }
40# SYMBOLS-LLVM-NEXT:]
41
42#      SYMBOLS-GNU64:Symbol table '.symtab' contains 3 entries:
43# SYMBOLS-GNU64-NEXT:   Num:    Value          Size Type    Bind   Vis       Ndx Name
44# SYMBOLS-GNU64-NEXT:     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT   UND
45# SYMBOLS-GNU64-NEXT:     1: 0000000000000001     0 NOTYPE  LOCAL  DEFAULT   UND foo
46# SYMBOLS-GNU64-NEXT:     2: 0000000000000002     0 NOTYPE  LOCAL  DEFAULT   UND bar
47
48#      SYMBOLS-GNU32:Symbol table '.symtab' contains 3 entries:
49# SYMBOLS-GNU32-NEXT:   Num:    Value  Size Type    Bind   Vis       Ndx Name
50# SYMBOLS-GNU32-NEXT:     0: 00000000     0 NOTYPE  LOCAL  DEFAULT   UND
51# SYMBOLS-GNU32-NEXT:     1: 00000001     0 NOTYPE  LOCAL  DEFAULT   UND foo
52# SYMBOLS-GNU32-NEXT:     2: 00000002     0 NOTYPE  LOCAL  DEFAULT   UND bar
53
54## Case 2: Check flag aliases produce identical output
55# RUN: llvm-readobj --symbols %t64 > %t.symbols
56# RUN: llvm-readobj --syms %t64 > %t.syms
57# RUN: cmp %t.symbols %t.syms
58# RUN: llvm-readobj -t %t64 > %t.t
59# RUN: cmp %t.symbols %t.t
60# RUN: llvm-readelf -s --elf-output-style=LLVM %t64 > %t.lowers
61# RUN: cmp %t.symbols %t.lowers
62
63# RUN: llvm-readelf --symbols %t64 > %t.symbols.gnu
64# RUN: llvm-readelf --syms %t64 > %t.syms.gnu
65# RUN: cmp %t.symbols.gnu %t.syms.gnu
66## There is no -t option in llvm-readelf.
67# RUN: not llvm-readelf -t %t64 2>&1 | FileCheck %s --check-prefix=NO-T-ERR
68# NO-T-ERR: Unknown command line argument '-t'
69## -s is an llvm-readobj option to dump sections.
70# RUN: llvm-readobj -s --elf-output-style=GNU %t64 | FileCheck %s --implicit-check-not="Symbol table"
71
72## Case 3: Test that both regular and dynamic symbols are dumped when `--symbols` and `--dyn-symbols`
73##         are specified together. Note that the order is different for different styles.
74# RUN: llvm-readobj --symbols --dyn-symbols %t64 | FileCheck %s --check-prefix=BOTH-LLVM
75# RUN: llvm-readelf --symbols --dyn-symbols %t64 | FileCheck %s --check-prefix=BOTH-GNU
76
77# BOTH-LLVM: Symbols [
78# BOTH-LLVM: DynamicSymbols [
79
80# BOTH-GNU: Symbol table '.dynsym'
81# BOTH-GNU: Symbol table '.symtab'
82
83## Case 4: --symbols implies --dyn-symbols for llvm-readelf.
84# RUN: llvm-readobj --symbols %t64 | FileCheck %s --implicit-check-not="DynamicSymbols ["
85# RUN: llvm-readelf --symbols %t64 | FileCheck %s --check-prefix=BOTH-GNU
86
87## Case 5: Test that `--dyn-symbols` does not trigger `--symbols` implicitly.
88# RUN: llvm-readobj --dyn-symbols %t64 | FileCheck %s --implicit-check-not="{{^}}Symbols ["
89# RUN: llvm-readelf --dyn-symbols %t64 | FileCheck %s --implicit-check-not="Symbol table '.symtab'"
90
91--- !ELF
92FileHeader:
93  Class:   ELFCLASS64
94  Data:    ELFDATA2LSB
95  Type:    ET_REL
96  Machine: EM_X86_64
97Symbols:
98  - Name:  foo
99    Value: 0x1
100  - Name:  bar
101    Value: 0x2
102DynamicSymbols:
103  - Name:  zed
104
105--- !ELF
106FileHeader:
107  Class:   ELFCLASS32
108  Data:    ELFDATA2LSB
109  Type:    ET_REL
110  Machine: EM_386
111Symbols:
112  - Name:  foo
113    Value: 0x1
114  - Name:  bar
115    Value: 0x2
116DynamicSymbols:
117  - Name:  zed
118