xref: /llvm-project/llvm/test/tools/llvm-readobj/ELF/symbol-visibility.test (revision 93c1a5f3ddd41e0ec09f38ab0045bd5e92199fd5)
1## Show that llvm-readobj prints the symbol visibility where recognised, or
2## something sensible when not, for both GNU and LLVM output.
3
4## Check how we dump symbols when they have only STV_* bits set for st_other.
5## (This is the most common case).
6
7# RUN: yaml2obj --docnum=1 %s -o %t1.o
8# RUN: llvm-readobj --symbols %t1.o | FileCheck %s --check-prefix=LLVM
9# RUN: llvm-readelf --symbols %t1.o | FileCheck %s --strict-whitespace --check-prefix=GNU
10# RUN: llvm-readobj --symbols --pretty-print --elf-output-style=JSON %t1.o | FileCheck %s --check-prefix=JSON
11
12# LLVM:      Name: default
13# LLVM:      Other: 0
14# LLVM:      Name: internal
15# LLVM:      Other [ (0x1)
16# LLVM-NEXT:   STV_INTERNAL (0x1)
17# LLVM-NEXT: ]
18# LLVM:      Name: hidden
19# LLVM:      Other [ (0x2)
20# LLVM-NEXT:   STV_HIDDEN (0x2)
21# LLVM-NEXT: ]
22# LLVM:      Name: protected
23# LLVM:      Other [ (0x3)
24# LLVM-NEXT:   STV_PROTECTED (0x3)
25# LLVM-NEXT: ]
26
27# GNU:      Vis       Ndx Name
28# GNU-NEXT: DEFAULT   UND
29# GNU-NEXT: DEFAULT   UND default
30# GNU-NEXT: INTERNAL  UND internal
31# GNU-NEXT: HIDDEN    UND hidden
32# GNU-NEXT: PROTECTED UND protected
33
34# JSON:      "Name": "default",
35# JSON:      "Other": {
36# JSON-NEXT:   "Value": 0,
37# JSON-NEXT:   "Flags": []
38# JSON-NEXT: },
39
40# JSON:      "Name": "internal",
41# JSON:      "Other": {
42# JSON-NEXT:    "Value": 1,
43# JSON-NEXT:    "Flags": [
44# JSON-NEXT:      {
45# JSON-NEXT:        "Name": "STV_INTERNAL",
46# JSON-NEXT:        "Value": 1
47# JSON-NEXT:      }
48# JSON-NEXT:    ]
49# JSON-NEXT:  },
50
51# JSON:      "Name": "hidden",
52# JSON:      "Other": {
53# JSON-NEXT:    "Value": 2,
54# JSON-NEXT:    "Flags": [
55# JSON-NEXT:      {
56# JSON-NEXT:        "Name": "STV_HIDDEN",
57# JSON-NEXT:        "Value": 2
58# JSON-NEXT:      }
59# JSON-NEXT:    ]
60# JSON-NEXT:  },
61
62# JSON:      "Name": "protected",
63# JSON:      "Other": {
64# JSON-NEXT:    "Value": 3,
65# JSON-NEXT:    "Flags": [
66# JSON-NEXT:      {
67# JSON-NEXT:        "Name": "STV_PROTECTED",
68# JSON-NEXT:        "Value": 3
69# JSON-NEXT:      }
70# JSON-NEXT:    ]
71# JSON-NEXT:  },
72
73--- !ELF
74FileHeader:
75  Class: ELFCLASS32
76  Data:  ELFDATA2LSB
77  Type:  ET_REL
78Symbols:
79  - Name: default
80    Other: [ STV_DEFAULT ]
81    Binding: STB_GLOBAL
82  - Name: internal
83    Other: [ STV_INTERNAL ]
84    Binding: STB_GLOBAL
85  - Name: hidden
86    Other: [ STV_HIDDEN ]
87    Binding: STB_GLOBAL
88  - Name: protected
89    Other: [ STV_PROTECTED ]
90    Binding: STB_GLOBAL
91
92## Check the output when we have non-visibility bits set for at least one of the symbols.
93
94# RUN: yaml2obj --docnum=2 %s -o %t2.o
95# RUN: llvm-readobj --symbols %t2.o | FileCheck %s --check-prefixes=LLVM,LLVM-OTHER
96# RUN: llvm-readelf --symbols %t2.o | FileCheck %s --strict-whitespace --check-prefix=GNU-OTHER
97
98# LLVM-OTHER:      Name: other
99# LLVM-OTHER:      Other [ (0x4)
100# LLVM-OTHER-NEXT: ]
101
102#      GNU-OTHER: Vis                    Ndx Name
103# GNU-OTHER-NEXT: DEFAULT                UND
104# GNU-OTHER-NEXT: DEFAULT                UND default
105# GNU-OTHER-NEXT: INTERNAL               UND internal
106# GNU-OTHER-NEXT: HIDDEN                 UND hidden
107# GNU-OTHER-NEXT: PROTECTED              UND protected
108# GNU-OTHER-NEXT: DEFAULT [<other: 0x4>] UND other
109
110--- !ELF
111FileHeader:
112  Class: ELFCLASS32
113  Data:  ELFDATA2LSB
114  Type:  ET_REL
115Symbols:
116  - Name: default
117    Other: [ STV_DEFAULT ]
118  - Name: internal
119    Other: [ STV_INTERNAL ]
120  - Name: hidden
121    Other: [ STV_HIDDEN ]
122  - Name: protected
123    Other: [ STV_PROTECTED ]
124  - Name: other
125    Other: [ 4 ]
126