1## Check how we dump arch specific ELF section flags.
2
3# RUN: yaml2obj --docnum 1 %s -o %t-hex.o
4# RUN: llvm-readobj -S %t-hex.o | FileCheck --check-prefix=HEX-LLVM %s
5# RUN: llvm-readelf -S %t-hex.o | FileCheck --check-prefix=HEX-GNU %s
6
7# HEX-LLVM:      Flags [ (0x10000000)
8# HEX-LLVM-NEXT:   SHF_HEX_GPREL (0x10000000)
9# HEX-LLVM-NEXT: ]
10
11# HEX-GNU: [Nr] Name Type     Address  Off    Size   ES Flg Lk Inf Al
12# HEX-GNU: [ 1] .hex PROGBITS 00000000 000034 000000 00   p  0   0  0
13
14--- !ELF
15FileHeader:
16  Class:   ELFCLASS32
17  Data:    ELFDATA2LSB
18  Type:    ET_REL
19  Machine: EM_HEXAGON
20Sections:
21  - Name:  .hex
22    Type:  SHT_PROGBITS
23    Flags: [ SHF_HEX_GPREL ]
24
25# RUN: yaml2obj --docnum 2 %s -o %t-mips.o
26# RUN: llvm-readobj -S %t-mips.o | FileCheck --check-prefix=MIPS-LLVM %s
27# RUN: llvm-readelf -S %t-mips.o | FileCheck --check-prefix=MIPS-GNU %s
28
29# MIPS-GNU: [Nr] Name  Type     Address  Off    Size   ES Flg Lk Inf Al
30# MIPS-GNU: [ 1] .mips PROGBITS 00000000 000034 000000 00  op  0   0  0
31
32# MIPS-LLVM:      Flags [ (0xFF000000)
33# MIPS-LLVM-NEXT:   SHF_EXCLUDE (0x80000000)
34# MIPS-LLVM-NEXT:   SHF_MIPS_ADDR (0x40000000)
35# MIPS-LLVM-NEXT:   SHF_MIPS_GPREL (0x10000000)
36# MIPS-LLVM-NEXT:   SHF_MIPS_LOCAL (0x4000000)
37# MIPS-LLVM-NEXT:   SHF_MIPS_MERGE (0x20000000)
38# MIPS-LLVM-NEXT:   SHF_MIPS_NAMES (0x2000000)
39# MIPS-LLVM-NEXT:   SHF_MIPS_NODUPES (0x1000000)
40# MIPS-LLVM-NEXT:   SHF_MIPS_NOSTRIP (0x8000000)
41# MIPS-LLVM-NEXT:   SHF_MIPS_STRING (0x80000000)
42# MIPS-LLVM-NEXT: ]
43
44--- !ELF
45FileHeader:
46  Class:   ELFCLASS32
47  Data:    ELFDATA2LSB
48  Type:    ET_REL
49  Machine: EM_MIPS
50Sections:
51  - Name:  .mips
52    Type:  SHT_PROGBITS
53    Flags: [ SHF_MIPS_NODUPES, SHF_MIPS_NAMES, SHF_MIPS_LOCAL, SHF_MIPS_NOSTRIP,
54              SHF_MIPS_GPREL, SHF_MIPS_MERGE, SHF_MIPS_ADDR, SHF_MIPS_STRING ]
55
56## Test what we print when a MIPS object has the SHF_MIPS_STRING flag.
57## SHF_MIPS_STRING has a value of 0x80000000, which matches the value of SHF_EXCLUDE.
58
59# RUN: yaml2obj --docnum 3 %s -o %t-mips-exclude.o
60# RUN: llvm-readobj -S %t-mips-exclude.o | FileCheck --check-prefix=MIPS-EXCLUDE-LLVM %s
61# RUN: llvm-readelf -S %t-mips-exclude.o | FileCheck --check-prefix=MIPS-EXCLUDE-GNU %s
62
63# MIPS-EXCLUDE-LLVM:      Name: .mips
64# MIPS-EXCLUDE-LLVM-NEXT: Type: SHT_PROGBITS
65# MIPS-EXCLUDE-LLVM-NEXT: Flags [ (0x80000000)
66# MIPS-EXCLUDE-LLVM-NEXT:  SHF_EXCLUDE (0x80000000)
67# MIPS-EXCLUDE-LLVM-NEXT:  SHF_MIPS_STRING (0x80000000)
68# MIPS-EXCLUDE-LLVM-NEXT: ]
69
70# MIPS-EXCLUDE-GNU: [Nr] Name  Type     Address  Off    Size   ES Flg Lk Inf Al
71# MIPS-EXCLUDE-GNU: [ 1] .mips PROGBITS 00000000 000034 000000 00   E  0   0  0
72
73--- !ELF
74FileHeader:
75  Class:   ELFCLASS32
76  Data:    ELFDATA2LSB
77  Type:    ET_REL
78  Machine: EM_MIPS
79Sections:
80  - Name:  .mips
81    Type:  SHT_PROGBITS
82    Flags: [ SHF_MIPS_STRING ]
83
84# RUN: yaml2obj --docnum 4 %s -o %t-x86_64.o
85# RUN: llvm-readobj -S %t-x86_64.o | FileCheck --check-prefix=X86_64-LLVM %s
86# RUN: llvm-readelf -S %t-x86_64.o | FileCheck --check-prefix=X86_64-GNU %s
87
88# X86_64-LLVM:      Name: .x86_64
89# X86_64-LLVM-NEXT: Type: SHT_PROGBITS
90# X86_64-LLVM-NEXT: Flags [ (0x10000000)
91# X86_64-LLVM-NEXT:   SHF_X86_64_LARGE (0x10000000)
92# X86_64-LLVM-NEXT: ]
93
94# X86_64-LLVM:      Name: .with.exclude
95# X86_64-LLVM-NEXT: Type: SHT_PROGBITS
96# X86_64-LLVM-NEXT: Flags [ (0x90000000)
97# X86_64-LLVM-NEXT:   SHF_EXCLUDE (0x80000000)
98# X86_64-LLVM-NEXT:   SHF_X86_64_LARGE (0x10000000)
99# X86_64-LLVM-NEXT: ]
100
101## GNU prints 'l' before 'E', despite otherwise printing upper-case letters first.
102# X86_64-GNU: [Nr] Name          Type     Address          Off    Size   ES Flg Lk Inf Al
103# X86_64-GNU: [ 1] .x86_64       PROGBITS 0000000000000000 000040 000000 00   l 0   0  0
104# X86_64-GNU: [ 2] .with.exclude PROGBITS 0000000000000000 000040 000000 00  lE 0   0  0
105
106--- !ELF
107FileHeader:
108  Class:   ELFCLASS64
109  Data:    ELFDATA2LSB
110  Type:    ET_REL
111  Machine: EM_X86_64
112Sections:
113  - Name:  .x86_64
114    Type:  SHT_PROGBITS
115    Flags: [ SHF_X86_64_LARGE ]
116  - Name:  .with.exclude
117    Type:  SHT_PROGBITS
118    Flags: [ SHF_X86_64_LARGE, SHF_EXCLUDE ]
119
120# RUN: yaml2obj --docnum 5 %s -o %t-arm.o
121# RUN: llvm-readobj -S %t-arm.o | FileCheck --check-prefix=ARM-LLVM %s
122# RUN: llvm-readelf -S %t-arm.o | FileCheck --check-prefix=ARM-GNU %s
123
124# ARM-LLVM:      Flags [ (0x20000000)
125# ARM-LLVM-NEXT:   SHF_ARM_PURECODE (0x20000000)
126# ARM-LLVM-NEXT: ]
127
128# ARM-GNU: [Nr] Name Type     Address          Off    Size   ES Flg Lk Inf Al
129# ARM-GNU: [ 1] foo  PROGBITS 0000000000000000 000040 000000 00   y 0   0  0
130
131--- !ELF
132FileHeader:
133  Class:   ELFCLASS64
134  Data:    ELFDATA2LSB
135  Type:    ET_REL
136  Machine: EM_ARM
137Sections:
138  - Name:  foo
139    Type:  SHT_PROGBITS
140    Flags: [ SHF_ARM_PURECODE ]
141