1 // Test sanitizers ld flags. 2 3 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 4 // RUN: -target i386-unknown-linux -fsanitize=address \ 5 // RUN: -resource-dir=%S/Inputs/resource_dir \ 6 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 7 // RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX %s 8 // 9 // CHECK-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 10 // CHECK-ASAN-LINUX-NOT: "-lc" 11 // CHECK-ASAN-LINUX: libclang_rt.asan-i386.a" 12 // CHECK-ASAN-LINUX: "-lpthread" 13 // CHECK-ASAN-LINUX: "-lrt" 14 // CHECK-ASAN-LINUX: "-ldl" 15 // CHECK-ASAN-LINUX-NOT: "-export-dynamic" 16 // CHECK-ASAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan-i386.a.syms" 17 18 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 19 // RUN: -target i386-unknown-linux -fsanitize=address -shared-libasan \ 20 // RUN: -resource-dir=%S/Inputs/resource_dir \ 21 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 22 // RUN: | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s 23 // 24 // CHECK-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 25 // CHECK-SHARED-ASAN-LINUX-NOT: "-lc" 26 // CHECK-SHARED-ASAN-LINUX-NOT: libclang_rt.asan-i386.a" 27 // CHECK-SHARED-ASAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.asan-preinit-i386.a" "-no-whole-archive" 28 // CHECK-SHARED-ASAN-LINUX: libclang_rt.asan-i386.so" 29 // CHECK-SHARED-ASAN-LINUX-NOT: "-lpthread" 30 // CHECK-SHARED-ASAN-LINUX-NOT: "-lrt" 31 // CHECK-SHARED-ASAN-LINUX-NOT: "-ldl" 32 // CHECK-SHARED-ASAN-LINUX-NOT: "-export-dynamic" 33 // CHECK-SHARED-ASAN-LINUX-NOT: "--dynamic-list" 34 35 // RUN: %clang -no-canonical-prefixes %s -### -o %t.so -shared 2>&1 \ 36 // RUN: -target i386-unknown-linux -fsanitize=address -shared-libasan \ 37 // RUN: -resource-dir=%S/Inputs/resource_dir \ 38 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 39 // RUN: | FileCheck --check-prefix=CHECK-DSO-SHARED-ASAN-LINUX %s 40 // 41 // CHECK-DSO-SHARED-ASAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 42 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lc" 43 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: libclang_rt.asan-i386.a" 44 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "libclang_rt.asan-preinit-i386.a" 45 // CHECK-DSO-SHARED-ASAN-LINUX: libclang_rt.asan-i386.so" 46 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lpthread" 47 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-lrt" 48 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-ldl" 49 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "-export-dynamic" 50 // CHECK-DSO-SHARED-ASAN-LINUX-NOT: "--dynamic-list" 51 52 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 53 // RUN: -target i386-unknown-freebsd -fsanitize=address \ 54 // RUN: -resource-dir=%S/Inputs/resource_dir \ 55 // RUN: --sysroot=%S/Inputs/basic_freebsd_tree \ 56 // RUN: | FileCheck --check-prefix=CHECK-ASAN-FREEBSD %s 57 // 58 // CHECK-ASAN-FREEBSD: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 59 // CHECK-ASAN-FREEBSD-NOT: "-lc" 60 // CHECK-ASAN-FREEBSD-NOT: libclang_rt.asan_cxx 61 // CHECK-ASAN-FREEBSD: freebsd{{/|\\+}}libclang_rt.asan-i386.a" 62 // CHECK-ASAN-FREEBSD-NOT: libclang_rt.asan_cxx 63 // CHECK-ASAN-FREEBSD: "-lpthread" 64 // CHECK-ASAN-FREEBSD: "-lrt" 65 // CHECK-ASAN-FREEBSD: "-export-dynamic" 66 // CHECK-ASAN-FREEBSD-NOT: "--dynamic-list" 67 68 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 69 // RUN: -target i386-unknown-freebsd -fsanitize=address \ 70 // RUN: -resource-dir=%S/Inputs/resource_dir \ 71 // RUN: --sysroot=%S/Inputs/basic_freebsd_tree \ 72 // RUN: | FileCheck --check-prefix=CHECK-ASAN-FREEBSD-LDL %s 73 // 74 // CHECK-ASAN-FREEBSD-LDL: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 75 // CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl" 76 77 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 78 // RUN: -target i386-unknown-linux -fsanitize=address \ 79 // RUN: -resource-dir=%S/Inputs/empty_resource_dir \ 80 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 81 // RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX %s 82 // 83 // CHECK-ASAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 84 // CHECK-ASAN-LINUX-CXX-NOT: "-lc" 85 // CHECK-ASAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan_cxx-i386.a" "-no-whole-archive" 86 // CHECK-ASAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive" 87 // CHECK-ASAN-LINUX-CXX: "-lpthread" 88 // CHECK-ASAN-LINUX-CXX: "-lrt" 89 // CHECK-ASAN-LINUX-CXX: "-ldl" 90 // CHECK-ASAN-LINUX-CXX: "-export-dynamic" 91 // CHECK-ASAN-LINUX-CXX-NOT: "--dynamic-list" 92 // CHECK-ASAN-LINUX-CXX: stdc++ 93 94 // RUN: %clang -no-canonical-prefixes %s -### -o /dev/null -fsanitize=address \ 95 // RUN: -target i386-unknown-linux --sysroot=%S/Inputs/basic_linux_tree \ 96 // RUN: -lstdc++ -static 2>&1 \ 97 // RUN: | FileCheck --check-prefix=CHECK-ASAN-LINUX-CXX-STATIC %s 98 // 99 // CHECK-ASAN-LINUX-CXX-STATIC: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 100 // CHECK-ASAN-LINUX-CXX-STATIC-NOT: stdc++ 101 // CHECK-ASAN-LINUX-CXX-STATIC: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive" 102 // CHECK-ASAN-LINUX-CXX-STATIC: stdc++ 103 104 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 105 // RUN: -target arm-linux-gnueabi -fsanitize=address \ 106 // RUN: --sysroot=%S/Inputs/basic_android_tree/sysroot \ 107 // RUN: | FileCheck --check-prefix=CHECK-ASAN-ARM %s 108 // 109 // CHECK-ASAN-ARM: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 110 // CHECK-ASAN-ARM-NOT: "-lc" 111 // CHECK-ASAN-ARM: libclang_rt.asan-arm.a" 112 // 113 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 114 // RUN: -target armv7l-linux-gnueabi -fsanitize=address \ 115 // RUN: --sysroot=%S/Inputs/basic_android_tree/sysroot \ 116 // RUN: | FileCheck --check-prefix=CHECK-ASAN-ARMv7 %s 117 // 118 // CHECK-ASAN-ARMv7: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 119 // CHECK-ASAN-ARMv7-NOT: "-lc" 120 // CHECK-ASAN-ARMv7: libclang_rt.asan-arm.a" 121 122 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 123 // RUN: -target arm-linux-androideabi -fsanitize=address \ 124 // RUN: --sysroot=%S/Inputs/basic_android_tree/sysroot \ 125 // RUN: | FileCheck --check-prefix=CHECK-ASAN-ANDROID %s 126 // 127 // CHECK-ASAN-ANDROID: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 128 // CHECK-ASAN-ANDROID-NOT: "-lc" 129 // CHECK-ASAN-ANDROID: libclang_rt.asan-arm-android.so" 130 // CHECK-ASAN-ANDROID-NOT: "-lpthread" 131 // CHECK-ASAN-ANDROID: "-pie" 132 // CHECK-ASAN-ANDROID-NOT: "-lpthread" 133 // 134 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 135 // RUN: -target arm-linux-androideabi -fsanitize=address \ 136 // RUN: --sysroot=%S/Inputs/basic_android_tree/sysroot \ 137 // RUN: -shared-libasan \ 138 // RUN: | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED-LIBASAN %s 139 // 140 // CHECK-ASAN-ANDROID-SHARED-LIBASAN-NOT: argument unused during compilation: '-shared-libasan' 141 // 142 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 143 // RUN: -target arm-linux-androideabi -fsanitize=address \ 144 // RUN: --sysroot=%S/Inputs/basic_android_tree/sysroot \ 145 // RUN: -shared \ 146 // RUN: | FileCheck --check-prefix=CHECK-ASAN-ANDROID-SHARED %s 147 // 148 // CHECK-ASAN-ANDROID-SHARED: "{{(.*[^.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 149 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lc" 150 // CHECK-ASAN-ANDROID-SHARED: libclang_rt.asan-arm-android.so" 151 // CHECK-ASAN-ANDROID-SHARED-NOT: "-lpthread" 152 153 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 154 // RUN: -target x86_64-unknown-linux -lstdc++ -fsanitize=thread \ 155 // RUN: -resource-dir=%S/Inputs/resource_dir \ 156 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 157 // RUN: | FileCheck --check-prefix=CHECK-TSAN-LINUX-CXX %s 158 // 159 // CHECK-TSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 160 // CHECK-TSAN-LINUX-CXX-NOT: stdc++ 161 // CHECK-TSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.tsan-x86_64.a" "-no-whole-archive" 162 // CHECK-TSAN-LINUX-CXX: "-lpthread" 163 // CHECK-TSAN-LINUX-CXX: "-lrt" 164 // CHECK-TSAN-LINUX-CXX: "-ldl" 165 // CHECK-TSAN-LINUX-CXX-NOT: "-export-dynamic" 166 // CHECK-TSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.tsan-x86_64.a.syms" 167 // CHECK-TSAN-LINUX-CXX: stdc++ 168 169 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 170 // RUN: -target x86_64-unknown-linux -lstdc++ -fsanitize=memory \ 171 // RUN: -resource-dir=%S/Inputs/resource_dir \ 172 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 173 // RUN: | FileCheck --check-prefix=CHECK-MSAN-LINUX-CXX %s 174 // 175 // CHECK-MSAN-LINUX-CXX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 176 // CHECK-MSAN-LINUX-CXX-NOT: stdc++ 177 // CHECK-MSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.msan-x86_64.a" "-no-whole-archive" 178 // CHECK-MSAN-LINUX-CXX: "-lpthread" 179 // CHECK-MSAN-LINUX-CXX: "-lrt" 180 // CHECK-MSAN-LINUX-CXX: "-ldl" 181 // CHECK-MSAN-LINUX-CXX-NOT: "-export-dynamic" 182 // CHECK-MSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.msan-x86_64.a.syms" 183 // CHECK-MSAN-LINUX-CXX: stdc++ 184 185 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \ 186 // RUN: -target i386-unknown-linux \ 187 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 188 // RUN: | FileCheck --check-prefix=CHECK-UBSAN-LINUX %s 189 // CHECK-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}" 190 // CHECK-UBSAN-LINUX-NOT: libclang_rt.asan 191 // CHECK-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.san-i386.a" "-no-whole-archive" 192 // CHECK-UBSAN-LINUX-NOT: libclang_rt.asan 193 // CHECK-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive" 194 // CHECK-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx 195 // CHECK-UBSAN-LINUX: "-lpthread" 196 // CHECK-UBSAN-LINUX-NOT: "-lstdc++" 197 198 // RUN: %clangxx -fsanitize=undefined %s -### -o %t.o 2>&1 \ 199 // RUN: -target i386-unknown-linux \ 200 // RUN: -resource-dir=%S/Inputs/resource_dir \ 201 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 202 // RUN: | FileCheck --check-prefix=CHECK-UBSAN-LINUX-CXX %s 203 // CHECK-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}" 204 // CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan 205 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.san-i386.a" "-no-whole-archive" 206 // CHECK-UBSAN-LINUX-CXX-NOT: libclang_rt.asan 207 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive" 208 // CHECK-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.ubsan-i386.a.syms" 209 // CHECK-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive" 210 // CHECK-UBSAN-LINUX-CXX: "-lpthread" 211 // CHECK-UBSAN-LINUX-CXX: "--dynamic-list={{.*}}libclang_rt.ubsan_cxx-i386.a.syms" 212 // CHECK-UBSAN-LINUX-CXX: "-lstdc++" 213 214 // RUN: %clang -fsanitize=address,undefined %s -### -o %t.o 2>&1 \ 215 // RUN: -target i386-unknown-linux \ 216 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 217 // RUN: | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX %s 218 // CHECK-ASAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}" 219 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.san 220 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive" 221 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.san 222 // CHECK-ASAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive" 223 // CHECK-ASAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx 224 // CHECK-ASAN-UBSAN-LINUX: "-lpthread" 225 // CHECK-ASAN-UBSAN-LINUX-NOT: "-lstdc++" 226 227 // RUN: %clangxx -fsanitize=address,undefined %s -### -o %t.o 2>&1 \ 228 // RUN: -target i386-unknown-linux \ 229 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 230 // RUN: | FileCheck --check-prefix=CHECK-ASAN-UBSAN-LINUX-CXX %s 231 // CHECK-ASAN-UBSAN-LINUX-CXX: "{{.*}}ld{{(.exe)?}}" 232 // CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.san 233 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.asan-i386.a" "-no-whole-archive" 234 // CHECK-ASAN-UBSAN-LINUX-CXX-NOT: libclang_rt.san 235 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan-i386.a" "-no-whole-archive" 236 // CHECK-ASAN-UBSAN-LINUX-CXX: "-whole-archive" "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive" 237 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lpthread" 238 // CHECK-ASAN-UBSAN-LINUX-CXX: "-lstdc++" 239 240 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \ 241 // RUN: -target i386-unknown-linux \ 242 // RUN: -resource-dir=%S/Inputs/resource_dir \ 243 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 244 // RUN: -shared \ 245 // RUN: | FileCheck --check-prefix=CHECK-UBSAN-LINUX-SHARED %s 246 // CHECK-UBSAN-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}" 247 // CHECK-UBSAN-LINUX-SHARED-NOT: --export-dynamic 248 // CHECK-UBSAN-LINUX-SHARED-NOT: --dynamic-list 249 // CHECK-UBSAN-LINUX-SHARED-NOT: libclang_rt.ubsan-i386.a" 250 // CHECK-UBSAN-LINUX-SHARED-NOT: --export-dynamic 251 // CHECK-UBSAN-LINUX-SHARED-NOT: --dynamic-list 252 253 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ 254 // RUN: -target x86_64-unknown-linux -fsanitize=leak \ 255 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 256 // RUN: | FileCheck --check-prefix=CHECK-LSAN-LINUX %s 257 // 258 // CHECK-LSAN-LINUX: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" 259 // CHECK-LSAN-LINUX-NOT: "-lc" 260 // CHECK-LSAN-LINUX: libclang_rt.lsan-x86_64.a" 261 // CHECK-LSAN-LINUX: "-lpthread" 262 // CHECK-LSAN-LINUX: "-ldl" 263 264 // RUN: %clang -fsanitize=leak,undefined %s -### -o %t.o 2>&1 \ 265 // RUN: -target x86_64-unknown-linux \ 266 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 267 // RUN: | FileCheck --check-prefix=CHECK-LSAN-UBSAN-LINUX %s 268 // CHECK-LSAN-UBSAN-LINUX: "{{.*}}ld{{(.exe)?}}" 269 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.san 270 // CHECK-LSAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.lsan-x86_64.a" "-no-whole-archive" 271 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.san 272 // CHECK-LSAN-UBSAN-LINUX: "-whole-archive" "{{.*}}libclang_rt.ubsan-x86_64.a" "-no-whole-archive" 273 // CHECK-LSAN-UBSAN-LINUX-NOT: libclang_rt.ubsan_cxx 274 // CHECK-LSAN-UBSAN-LINUX: "-lpthread" 275 // CHECK-LSAN-UBSAN-LINUX-NOT: "-lstdc++" 276 277 // RUN: %clang -fsanitize=leak,address %s -### -o %t.o 2>&1 \ 278 // RUN: -target x86_64-unknown-linux \ 279 // RUN: --sysroot=%S/Inputs/basic_linux_tree \ 280 // RUN: | FileCheck --check-prefix=CHECK-LSAN-ASAN-LINUX %s 281 // CHECK-LSAN-ASAN-LINUX: "{{.*}}ld{{(.exe)?}}" 282 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan 283 // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan-x86_64 284 // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan 285