xref: /llvm-project/clang/test/Driver/sls-hardening-options.c (revision f39c399d9d15efe8309d8aa3d0ecf62205e6c474)
1 // Check the -mharden-sls= option, which has a required argument to select
2 // scope.
3 // RUN: %clang -target aarch64 -c %s -### 2>&1 | \
4 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
5 // RUN: %clang -target armv7a--none-eabi -c %s -### 2>&1 | \
6 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
7 
8 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=none 2>&1 | \
9 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
10 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=none 2>&1 | \
11 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
12 
13 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=retbr 2>&1 | \
14 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
15 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=retbr 2>&1 | \
16 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
17 
18 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=blr 2>&1 | \
19 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
20 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=blr 2>&1 | \
21 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
22 
23 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=blr -mharden-sls=none 2>&1 | \
24 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
25 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=blr -mharden-sls=none 2>&1 | \
26 // RUN: FileCheck %s --check-prefix=RETBR-OFF --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
27 
28 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=blr -mharden-sls=retbr 2>&1 | \
29 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
30 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=blr -mharden-sls=retbr 2>&1 | \
31 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-OFF --check-prefix=NOCOMDAT-OFF
32 
33 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=retbr,blr 2>&1 | \
34 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
35 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=retbr,blr 2>&1 | \
36 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
37 
38 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=all 2>&1 | \
39 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
40 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=all 2>&1 | \
41 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
42 
43 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=retbr,blr,retbr 2>&1 | \
44 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
45 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=retbr,blr,retbr 2>&1 | \
46 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT-OFF
47 
48 // RUN: not %clang --target=aarch64 -c %s -### -mharden-sls=retbr,blr,r 2>&1 | \
49 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
50 // RUN: not %clang --target=armv7a--none-eabi -c %s -### -mharden-sls=retbr,blr,r 2>&1 | \
51 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
52 
53 // RUN: not %clang --target=aarch64 -c %s -### -mharden-sls=none,blr 2>&1 | \
54 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
55 // RUN: not %clang --target=armv7a--none-eabi -c %s -### -mharden-sls=none,blr 2>&1 | \
56 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
57 
58 // RUN: not %clang --target=aarch64 -c %s -### -mharden-sls=all,-blr 2>&1 | \
59 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
60 // RUN: not %clang --target=armv7a--none-eabi -c %s -### -mharden-sls=all,-blr 2>&1 | \
61 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
62 
63 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=retbr,blr,nocomdat 2>&1 | \
64 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT
65 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=retbr,blr,nocomdat 2>&1 | \
66 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT
67 
68 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=all,nocomdat 2>&1 | \
69 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT
70 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=all,nocomdat 2>&1 | \
71 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT
72 
73 // RUN: %clang -target aarch64 -c %s -### -mharden-sls=retbr,blr,retbr,nocomdat 2>&1 | \
74 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT
75 // RUN: %clang -target armv7a--none-eabi -c %s -### -mharden-sls=retbr,blr,retbr,nocomdat 2>&1 | \
76 // RUN: FileCheck %s --check-prefix=RETBR-ON --check-prefix=BLR-ON --check-prefix=NOCOMDAT
77 
78 // RUN: not %clang --target=aarch64 -c %s -### -mharden-sls=retbr,comdat,r 2>&1 | \
79 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
80 // RUN: not %clang --target=armv7a--none-eabi -c %s -### -mharden-sls=retbr,comdat,r 2>&1 | \
81 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
82 
83 // RUN: not %clang --target=aarch64 -c %s -### -mharden-sls=none,comdat 2>&1 | \
84 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
85 // RUN: not %clang --target=armv7a--none-eabi -c %s -### -mharden-sls=none,comdat 2>&1 | \
86 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
87 
88 // RUN: not %clang --target=aarch64 -c %s -### -mharden-sls=all,-comdat 2>&1 | \
89 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
90 // RUN: not %clang --target=armv7a--none-eabi -c %s -### -mharden-sls=all,-comdat 2>&1 | \
91 // RUN: FileCheck %s --check-prefix=BAD-SLS-SPEC
92 
93 // RETBR-OFF-NOT: "harden-sls-retbr"
94 // RETBR-ON:  "+harden-sls-retbr"
95 
96 // BLR-OFF-NOT: "harden-sls-blr"
97 // BLR-ON:  "+harden-sls-blr"
98 
99 // NOCOMDAT-OFF-NOT: "harden-sls-nocomdat"
100 // NOCOMDAT: "+harden-sls-nocomdat"
101 
102 // BAD-SLS-SPEC: unsupported argument '{{[^']+}}' to option '-mharden-sls='
103 
104 // RUN: not %clang --target=armv6a--none-eabi -c %s -### -mharden-sls=all 2>&1 | \
105 // RUN: FileCheck %s --check-prefix=SLS-NOT-SUPPORTED
106 
107 // RUN: not %clang --target=armv6a--none-eabi -c %s -### -mharden-sls=retbr 2>&1 | \
108 // RUN: FileCheck %s --check-prefix=SLS-NOT-SUPPORTED
109 
110 // RUN: not %clang --target=armv6a--none-eabi -c %s -### -mharden-sls=blr 2>&1 | \
111 // RUN: FileCheck %s --check-prefix=SLS-NOT-SUPPORTED
112 
113 // RUN: not %clang --target=armv7r--none-eabi -c %s -### -mharden-sls=all 2>&1 | \
114 // RUN: FileCheck %s --check-prefix=SLS-NOT-SUPPORTED
115 
116 // RUN: not %clang --target=armv7m--none-eabi -c %s -### -mharden-sls=all 2>&1 | \
117 // RUN: FileCheck %s --check-prefix=SLS-NOT-SUPPORTED
118 
119 // RUN: %clang -target armv6a--none-eabi -c %s -### -mharden-sls=none 2>&1 | \
120 // RUN: FileCheck %s --check-prefix=SLS-SUPPORTED
121 
122 // RUN: %clang -target armv7a-linux-gnueabihf -c %s -### -mharden-sls=all 2>&1 | \
123 // RUN: FileCheck %s --check-prefix=SLS-SUPPORTED
124 
125 // RUN: %clang -target armv8a-linux-gnueabihf -c %s -### -mharden-sls=all 2>&1 | \
126 // RUN: FileCheck %s --check-prefix=SLS-SUPPORTED
127 
128 // SLS-NOT-SUPPORTED: -mharden-sls is only supported on armv7-a or later
129 // SLS-SUPPORTED-NOT: mharden-sls
130 
131