diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2015-09-10 19:18:08 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2015-09-10 19:18:08 +0000 |
commit | 90335d09c9526b54d48e614cf9601a876c54930b (patch) | |
tree | 13001c69d6053b350a8cdad9adcbcc5acad43ad7 /test/cfi/icall | |
parent | 35c115c610e169f484148fe1689d0e9f69012411 (diff) | |
download | compiler-rt-90335d09c9526b54d48e614cf9601a876c54930b.tar.gz |
CFI: Run the tests only on supported architectures/OSs.
Specifically, only run the cfi-icall tests on x86/x86_64, and add
an XFAIL for darwin.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@247325 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/cfi/icall')
-rw-r--r-- | test/cfi/icall/bad-signature.c | 27 | ||||
-rw-r--r-- | test/cfi/icall/external-call.c | 27 | ||||
-rw-r--r-- | test/cfi/icall/lit.local.cfg | 3 |
3 files changed, 57 insertions, 0 deletions
diff --git a/test/cfi/icall/bad-signature.c b/test/cfi/icall/bad-signature.c new file mode 100644 index 000000000..43de1178f --- /dev/null +++ b/test/cfi/icall/bad-signature.c @@ -0,0 +1,27 @@ +// RUN: %clangxx -o %t1 %s +// RUN: %t1 2>&1 | FileCheck --check-prefix=NCFI %s + +// RUN: %clangxx_cfi -o %t2 %s +// RUN: %expect_crash %t2 2>&1 | FileCheck --check-prefix=CFI %s + +// RUN: %clangxx_cfi_diag -g -o %t3 %s +// RUN: %t3 2>&1 | FileCheck --check-prefix=CFI-DIAG %s + +#include <stdio.h> + +void f() { +} + +int main() { + // CFI: 1 + // NCFI: 1 + fprintf(stderr, "1\n"); + + // CFI-DIAG: runtime error: control flow integrity check for type 'void (int)' failed during indirect function call + // CFI-DIAG: f() defined here + ((void (*)(int))f)(42); // UB here + + // CFI-NOT: 2 + // NCFI: 2 + fprintf(stderr, "2\n"); +} diff --git a/test/cfi/icall/external-call.c b/test/cfi/icall/external-call.c new file mode 100644 index 000000000..43fc25207 --- /dev/null +++ b/test/cfi/icall/external-call.c @@ -0,0 +1,27 @@ +// RUN: %clangxx_cfi -o %t1 %s +// RUN: %t1 c 1 2>&1 | FileCheck --check-prefix=CFI %s +// RUN: %t1 s 2 2>&1 | FileCheck --check-prefix=CFI %s + +// This test uses jump tables containing PC-relative references to external +// symbols, which the Mach-O object writer does not currently support. +// XFAIL: darwin + +#include <stdlib.h> +#include <stdio.h> +#include <math.h> + +int main(int argc, char **argv) { + // CFI: 1 + fprintf(stderr, "1\n"); + + double (*fn)(double); + if (argv[1][0] == 's') + fn = sin; + else + fn = cos; + + fn(atof(argv[2])); + + // CFI: 2 + fprintf(stderr, "2\n"); +} diff --git a/test/cfi/icall/lit.local.cfg b/test/cfi/icall/lit.local.cfg new file mode 100644 index 000000000..db08765a2 --- /dev/null +++ b/test/cfi/icall/lit.local.cfg @@ -0,0 +1,3 @@ +# The cfi-icall checker is only supported on x86 and x86_64 for now. +if config.root.host_arch not in ['x86', 'x86_64']: + config.unsupported = True |