1# Test that cpu/processor-specific SHF_* flags are preserved.
2
3# ===== x86_64 =====
4
5# RUN: yaml2obj --docnum 1 %s > %t-x86_64.o
6# RUN: llvm-objcopy --rename-section=.foo=.bar,alloc %t-x86_64.o
7# RUN: llvm-readobj --sections %t-x86_64.o | FileCheck %s --check-prefix=X86_64
8
9--- !ELF
10FileHeader:
11  Class:           ELFCLASS64
12  Data:            ELFDATA2LSB
13  Type:            ET_REL
14  Machine:         EM_X86_64
15Sections:
16  - Name:          .foo
17    Type:          SHT_PROGBITS
18    Flags:         [ SHF_X86_64_LARGE ]
19
20# X86_64:        Name: .bar
21# X86_64-NEXT:   Type: SHT_PROGBITS
22# X86_64-NEXT:   Flags [
23# X86_64-NEXT:     SHF_ALLOC (0x2)
24# X86_64-NEXT:     SHF_WRITE (0x1)
25# X86_64-NEXT:     SHF_X86_64_LARGE (0x10000000)
26# X86_64-NEXT:   ]
27
28# ===== hex =====
29
30# RUN: yaml2obj --docnum 2 %s > %t-hex.o
31# RUN: llvm-objcopy --rename-section=.foo=.bar,alloc %t-hex.o
32# RUN: llvm-readobj --sections %t-hex.o | FileCheck %s --check-prefix=HEX
33
34--- !ELF
35FileHeader:
36  Class:           ELFCLASS64
37  Data:            ELFDATA2LSB
38  Type:            ET_REL
39  Machine:         EM_HEXAGON
40Sections:
41  - Name:          .foo
42    Type:          SHT_PROGBITS
43    Flags:         [ SHF_HEX_GPREL ]
44
45# HEX:        Name: .bar
46# HEX-NEXT:   Type: SHT_PROGBITS
47# HEX-NEXT:   Flags [
48# HEX-NEXT:     SHF_ALLOC (0x2)
49# HEX-NEXT:     SHF_HEX_GPREL (0x10000000)
50# HEX-NEXT:     SHF_WRITE (0x1)
51# HEX-NEXT:   ]
52
53# ===== mips =====
54
55# RUN: yaml2obj --docnum 3 %s > %t-mips.o
56# RUN: llvm-objcopy --rename-section=.foo=.bar,alloc %t-mips.o
57# RUN: llvm-readobj --sections %t-mips.o | FileCheck %s --check-prefix=MIPS
58
59--- !ELF
60FileHeader:
61  Class:           ELFCLASS64
62  Data:            ELFDATA2LSB
63  Type:            ET_REL
64  Machine:         EM_MIPS
65Sections:
66  - Name:          .foo
67    Type:          SHT_PROGBITS
68    Flags:         [ SHF_MIPS_NODUPES, SHF_MIPS_NAMES, SHF_MIPS_LOCAL,
69                     SHF_MIPS_NOSTRIP, SHF_MIPS_GPREL, SHF_MIPS_MERGE,
70		     SHF_MIPS_ADDR, SHF_MIPS_STRING ]
71
72# Note: llvm-readobj prints SHF_EXCLUDE/SHF_MASKPROC since specifying all
73# SHF_MIPS_* flags covers the same bitset.
74
75# MIPS:        Name: .bar
76# MIPS-NEXT:   Type: SHT_PROGBITS
77# MIPS-NEXT:   Flags [
78# MIPS-NEXT:     SHF_ALLOC (0x2)
79# MIPS-NEXT:     SHF_EXCLUDE (0x80000000)
80# MIPS-NEXT:     SHF_MIPS_ADDR (0x40000000)
81# MIPS-NEXT:     SHF_MIPS_GPREL (0x10000000)
82# MIPS-NEXT:     SHF_MIPS_LOCAL (0x4000000)
83# MIPS-NEXT:     SHF_MIPS_MERGE (0x20000000)
84# MIPS-NEXT:     SHF_MIPS_NAMES (0x2000000)
85# MIPS-NEXT:     SHF_MIPS_NODUPES (0x1000000)
86# MIPS-NEXT:     SHF_MIPS_NOSTRIP (0x8000000)
87# MIPS-NEXT:     SHF_MIPS_STRING (0x80000000)
88# MIPS-NEXT:     SHF_WRITE (0x1)
89# MIPS-NEXT:   ]
90
91# ===== arm =====
92
93# RUN: yaml2obj --docnum 4 %s > %t-arm.o
94# RUN: llvm-objcopy --rename-section=.foo=.bar,alloc %t-arm.o
95# RUN: llvm-readobj --sections %t-arm.o | FileCheck %s --check-prefix=ARM
96
97--- !ELF
98FileHeader:
99  Class:           ELFCLASS64
100  Data:            ELFDATA2LSB
101  Type:            ET_REL
102  Machine:         EM_ARM
103Sections:
104  - Name:          .foo
105    Type:          SHT_PROGBITS
106    Flags:         [ SHF_ARM_PURECODE ]
107
108# ARM:        Name: .bar
109# ARM-NEXT:   Type: SHT_PROGBITS
110# ARM-NEXT:   Flags [
111# ARM-NEXT:     SHF_ALLOC (0x2)
112# ARM-NEXT:     SHF_ARM_PURECODE (0x20000000)
113# ARM-NEXT:     SHF_WRITE (0x1)
114# ARM-NEXT:   ]
115