Skip to content

Commit 0400b8e

Browse files
authored
[NFC][CFI] Add CFI minimal runtime tests (#137093)
1 parent 905f1d8 commit 0400b8e

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

clang/test/Driver/fsanitize.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,27 @@
951951
// CHECK-CFI-MINIMAL: "-fsanitize-trap=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
952952
// CHECK-CFI-MINIMAL: "-fsanitize-minimal-runtime"
953953

954+
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=hidden -fsanitize-minimal-runtime -fsanitize-recover=cfi -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-RECOVER-MINIMAL
955+
// CHECK-CFI-RECOVER-MINIMAL: "-fsanitize=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
956+
// CHECK-CFI-RECOVER-MINIMAL: "-fsanitize-trap=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
957+
// CHECK-CFI-RECOVER-MINIMAL: "-fsanitize-minimal-runtime"
958+
959+
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=hidden -fsanitize-minimal-runtime -fno-sanitize-recover=cfi -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-ABORT-MINIMAL
960+
// CHECK-CFI-ABORT-MINIMAL: "-fsanitize=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
961+
// CHECK-CFI-ABORT-MINIMAL: "-fsanitize-trap=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
962+
// CHECK-CFI-ABORT-MINIMAL: "-fsanitize-minimal-runtime"
963+
964+
// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=hidden -fsanitize-minimal-runtime -fno-sanitize-trap=cfi -fsanitize-recover=cfi -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOTRAP-RECOVER-MINIMAL --
965+
// CHECK-CFI-NOTRAP-RECOVER-MINIMAL: 'fsanitize-minimal-runtime' only allowed with 'fsanitize-trap=cfi'
966+
// CHECK-CFI-NOTRAP-RECOVER-MINIMAL: "-fsanitize=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
967+
// CHECK-CFI-NOTRAP-RECOVER-MINIMAL: "-fsanitize-recover=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
968+
// CHECK-CFI-NOTRAP-RECOVER-MINIMAL: "-fsanitize-minimal-runtime"
969+
970+
// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -flto -fvisibility=hidden -fsanitize-minimal-runtime -fno-sanitize-trap=cfi -fno-sanitize-recover=cfi -resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOTRAP-ABORT-MINIMAL
971+
// CHECK-CFI-NOTRAP-ABORT-MINIMAL: 'fsanitize-minimal-runtime' only allowed with 'fsanitize-trap=cfi'
972+
// CHECK-CFI-NOTRAP-ABORT-MINIMAL: "-fsanitize=cfi-derived-cast,cfi-icall,cfi-mfcall,cfi-unrelated-cast,cfi-nvcall,cfi-vcall"
973+
// CHECK-CFI-NOTRAP-ABORT-MINIMAL: "-fsanitize-minimal-runtime"
974+
954975
// RUN: not %clang --target=x86_64-linux-gnu -fsanitize=cfi -fno-sanitize-trap=cfi-icall -flto -fvisibility=hidden -fsanitize-minimal-runtime %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-CFI-NOTRAP-MINIMAL
955976
// CHECK-CFI-NOTRAP-MINIMAL: error: invalid argument 'fsanitize-minimal-runtime' only allowed with 'fsanitize-trap=cfi'
956977

clang/test/Driver/sanitizer-ld.c

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,84 @@
908908
// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "{{[^"]*}}libclang_rt.ubsan_standalone.so"
909909
// CHECK-CFI-CROSS-DSO-DIAG-ANDROID: "--export-dynamic-symbol=__cfi_check"
910910

911+
// CFI by itself does not link runtime libraries.
912+
// RUN: %clang -fsanitize=cfi \
913+
// RUN: -flto -fvisibility=hidden \
914+
// RUN: -fsanitize-minimal-runtime \
915+
// RUN: --target=x86_64-unknown-linux -fuse-ld=ld \
916+
// RUN: -resource-dir=%S/Inputs/resource_dir \
917+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
918+
// RUN: -### %s 2>&1 \
919+
// RUN: | %{filecheck} --check-prefix=CHECK-CFI-MINRT-LINUX
920+
// CHECK-CFI-MINRT-LINUX: "{{.*}}ld{{(.exe)?}}"
921+
922+
// CFI with diagnostics links the UBSan runtime.
923+
// RUN: not %clang -fsanitize=cfi -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
924+
// RUN: -flto -fvisibility=hidden \
925+
// RUN: -fsanitize-minimal-runtime \
926+
// RUN: --target=x86_64-unknown-linux -fuse-ld=ld \
927+
// RUN: -resource-dir=%S/Inputs/resource_dir \
928+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
929+
// RUN: -### %s 2>&1 \
930+
// RUN: | %{filecheck} --check-prefix=CHECK-CFI-MINRT-DIAG-LINUX
931+
// CHECK-CFI-MINRT-DIAG-LINUX: 'fsanitize-minimal-runtime' only allowed with 'fsanitize-trap=cfi'
932+
// CHECK-CFI-MINRT-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}"
933+
// CHECK-CFI-MINRT-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.ubsan_minimal.a" "--no-whole-archive"
934+
935+
// Cross-DSO CFI links the CFI runtime.
936+
// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \
937+
// RUN: -flto -fvisibility=hidden \
938+
// RUN: -fsanitize-minimal-runtime \
939+
// RUN: --target=x86_64-unknown-linux -fuse-ld=ld \
940+
// RUN: -resource-dir=%S/Inputs/resource_dir \
941+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
942+
// RUN: -### %s 2>&1 \
943+
// RUN: | %{filecheck} --check-prefix=CHECK-CFI-MINRT-CROSS-DSO-LINUX
944+
// CHECK-CFI-MINRT-CROSS-DSO-LINUX: "{{.*}}ld{{(.exe)?}}"
945+
// CHECK-CFI-MINRT-CROSS-DSO-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi.a" "--no-whole-archive"
946+
// CHECK-CFI-MINRT-CROSS-DSO-LINUX: -export-dynamic
947+
948+
// Cross-DSO CFI with diagnostics links just the CFI runtime.
949+
// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \
950+
// RUN: -flto -fvisibility=hidden \
951+
// RUN: -fsanitize-minimal-runtime \
952+
// RUN: -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
953+
// RUN: --target=x86_64-unknown-linux -fuse-ld=ld \
954+
// RUN: -resource-dir=%S/Inputs/resource_dir \
955+
// RUN: --sysroot=%S/Inputs/basic_linux_tree \
956+
// RUN: -### %s 2>&1 \
957+
// RUN: | %{filecheck} --check-prefix=CHECK-CFI-MINRT-CROSS-DSO-DIAG-LINUX
958+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-LINUX: 'fsanitize-minimal-runtime' only allowed with 'fsanitize-trap=cfi'
959+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-LINUX: "{{.*}}ld{{(.exe)?}}"
960+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-LINUX: "--whole-archive" "{{[^"]*}}libclang_rt.cfi_diag.a" "--no-whole-archive"
961+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-LINUX: -export-dynamic
962+
963+
// Cross-DSO CFI on Android does not link runtime libraries.
964+
// RUN: %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \
965+
// RUN: -flto -fvisibility=hidden \
966+
// RUN: -fsanitize-minimal-runtime \
967+
// RUN: --target=aarch64-linux-android -fuse-ld=ld \
968+
// RUN: -resource-dir=%S/Inputs/resource_dir \
969+
// RUN: --sysroot=%S/Inputs/basic_android_tree \
970+
// RUN: -### %s 2>&1 \
971+
// RUN: | %{filecheck} --check-prefix=CHECK-CFI-MINRT-CROSS-DSO-ANDROID
972+
// CHECK-CFI-MINRT-CROSS-DSO-ANDROID: "{{.*}}ld{{(.exe)?}}"
973+
974+
// Cross-DSO CFI with diagnostics on Android links just the UBSAN runtime.
975+
// RUN: not %clang -fsanitize=cfi -fsanitize-cfi-cross-dso \
976+
// RUN: -flto -fvisibility=hidden \
977+
// RUN: -fsanitize-minimal-runtime \
978+
// RUN: -fno-sanitize-trap=cfi -fsanitize-recover=cfi \
979+
// RUN: --target=aarch64-linux-android -fuse-ld=ld \
980+
// RUN: -resource-dir=%S/Inputs/resource_dir \
981+
// RUN: --sysroot=%S/Inputs/basic_android_tree \
982+
// RUN: -### %s 2>&1 \
983+
// RUN: | %{filecheck} --check-prefix=CHECK-CFI-MINRT-CROSS-DSO-DIAG-ANDROID
984+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-ANDROID: 'fsanitize-minimal-runtime' only allowed with 'fsanitize-trap=cfi'
985+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-ANDROID: "{{.*}}ld{{(.exe)?}}"
986+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-ANDROID: "{{[^"]*}}libclang_rt.ubsan_minimal.so"
987+
// CHECK-CFI-MINRT-CROSS-DSO-DIAG-ANDROID: "--export-dynamic-symbol=__cfi_check"
988+
911989
// RUN: %clangxx -fsanitize=address -### %s 2>&1 \
912990
// RUN: -mmacos-version-min=10.6 \
913991
// RUN: --target=x86_64-apple-darwin13.4.0 -fuse-ld=ld -stdlib=platform \

0 commit comments

Comments
 (0)