[memprof] Remove an unused using directive (#117004)
[llvm-project.git] / lld / test / ELF / aarch64-feature-gcs.s
blob7a08673dbb7e6b0988487f90dabe9eedf5e3c839
1 # REQUIRES: aarch64
2 # RUN: rm -rf %t && split-file %s %t && cd %t
3 # RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu func1-gcs.s -o func1-gcs.o
4 # RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu func2.s -o func2.o
5 # RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu func2-gcs.s -o func2-gcs.o
6 # RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu func3.s -o func3.o
7 # RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu func3-gcs.s -o func3-gcs.o
9 ## GCS should be enabled when it's enabled in all inputs or when it's forced on.
11 # RUN: ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -o gcs
12 # RUN: llvm-readelf -n gcs | FileCheck --check-prefix GCS %s
13 # RUN: ld.lld func1-gcs.o func3-gcs.o --shared -o gcs.so
14 # RUN: llvm-readelf -n gcs.so | FileCheck --check-prefix GCS %s
15 # RUN: ld.lld func1-gcs.o func2.o func3-gcs.o -o force-gcs -z gcs=always
16 # RUN: llvm-readelf -n force-gcs | FileCheck --check-prefix GCS %s
17 # RUN: ld.lld func2-gcs.o func3.o --shared -o force-gcs.so -z gcs=always
18 # RUN: llvm-readelf -n force-gcs.so | FileCheck --check-prefix GCS %s
19 # RUN: ld.lld func2-gcs.o func3.o --shared -o force-gcs2.so -z gcs=never -z gcs=always
20 # RUN: llvm-readelf -n force-gcs2.so | FileCheck --check-prefix GCS %s
22 # GCS: Properties: aarch64 feature: GCS
24 ## GCS should not be enabled if it's not enabled in at least one input.
26 # RUN: ld.lld func1-gcs.o func2.o func3-gcs.o -o no-gcs
27 # RUN: llvm-readelf -n no-gcs | count 0
28 # RUN: ld.lld func2-gcs.o func3.o --shared -o no-gcs.so
30 ## GCS should be disabled with gcs=never, even if GCS is present in all inputs.
32 # RUN: ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -z gcs=never -o never-gcs
33 # RUN: llvm-readelf -n never-gcs | count 0
34 # RUN: ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -z gcs=always -z gcs=never -o never-gcs2
35 # RUN: llvm-readelf -n never-gcs2 | count 0
37 ## gcs-report should report any input files that don't have the gcs property.
39 # RUN: ld.lld func1-gcs.o func2.o func3-gcs.o -o /dev/null -z gcs-report=warning 2>&1 | FileCheck --check-prefix=REPORT-WARN %s
40 # RUN: ld.lld func1-gcs.o func2.o func3-gcs.o -o /dev/null -z gcs-report=warning -z gcs=always 2>&1 | FileCheck --check-prefix=REPORT-WARN %s
41 # RUN: ld.lld func1-gcs.o func2.o func3-gcs.o -o /dev/null -z gcs-report=warning -z gcs=never 2>&1 | FileCheck --check-prefix=REPORT-WARN %s
42 # RUN: not ld.lld func2-gcs.o func3.o --shared -o /dev/null -z gcs-report=error 2>&1 | FileCheck --check-prefix=REPORT-ERROR %s
43 # RUN: not ld.lld func2-gcs.o func3.o --shared -o /dev/null -z gcs-report=error -z gcs=always 2>&1 | FileCheck --check-prefix=REPORT-ERROR %s
44 # RUN: not ld.lld func2-gcs.o func3.o --shared -o /dev/null -z gcs-report=error -z gcs=never 2>&1 | FileCheck --check-prefix=REPORT-ERROR %s
45 # RUN: ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -o /dev/null -z gcs-report=warning 2>&1 | count 0
46 # RUN: ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -o /dev/null -z gcs-report=warning -z gcs=always 2>&1 | count 0
47 # RUN: ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -o /dev/null -z gcs-report=warning -z gcs=never 2>&1 | count 0
49 # REPORT-WARN: warning: func2.o: -z gcs-report: file does not have GNU_PROPERTY_AARCH64_FEATURE_1_GCS property
50 # REPORT-ERROR: error: func3.o: -z gcs-report: file does not have GNU_PROPERTY_AARCH64_FEATURE_1_GCS property
52 ## An invalid gcs option should give an error
53 # RUN: not ld.lld func1-gcs.o func2-gcs.o func3-gcs.o -z gcs=nonsense 2>&1 | FileCheck --check-prefix=INVALID %s
55 # INVALID: error: unknown -z gcs= value: nonsense
57 #--- func1-gcs.s
58 .section ".note.gnu.property", "a"
59 .long 4
60 .long 0x10
61 .long 0x5
62 .asciz "GNU"
64 .long 0xc0000000 // GNU_PROPERTY_AARCH64_FEATURE_1_AND
65 .long 4
66 .long 4 // GNU_PROPERTY_AARCH64_FEATURE_1_GCS
67 .long 0
69 .text
70 .globl _start
71 .type func1,%function
72 func1:
73 bl func2
74 ret
76 #--- func2.s
78 .text
79 .globl func2
80 .type func2,@function
81 func2:
82 .globl func3
83 .type func3, @function
84 bl func3
85 ret
87 #--- func2-gcs.s
89 .section ".note.gnu.property", "a"
90 .long 4
91 .long 0x10
92 .long 0x5
93 .asciz "GNU"
95 .long 0xc0000000 // GNU_PROPERTY_AARCH64_FEATURE_1_AND
96 .long 4
97 .long 4 // GNU_PROPERTY_AARCH64_FEATURE_1_GCS
98 .long 0
100 .text
101 .globl func2
102 .type func2,@function
103 func2:
104 .globl func3
105 .type func3, @function
106 bl func3
109 #--- func3.s
111 .text
112 .globl func3
113 .type func3,@function
114 func3:
117 #--- func3-gcs.s
119 .section ".note.gnu.property", "a"
120 .long 4
121 .long 0x10
122 .long 0x5
123 .asciz "GNU"
125 .long 0xc0000000 // GNU_PROPERTY_AARCH64_FEATURE_1_AND
126 .long 4
127 .long 4 // GNU_PROPERTY_AARCH64_FEATURE_1_GCS
128 .long 0
130 .text
131 .globl func3
132 .type func3,@function
133 func3: