Home | History | Annotate | Download | only in Driver
      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