aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
diff options
context:
space:
mode:
authorCaroline Tice <cmtice@google.com>2018-01-08 18:25:12 (GMT)
committerCaroline Tice <cmtice@google.com>2018-01-08 18:25:12 (GMT)
commitdeec799746e92ab0487eca489499ade08a2610bf (patch)
tree9a2c42ca86130fa98e61c5d7bfb7e890f501a066 /gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
parentdca601e5d2b032ac5cca1df90ac56077ccf5d665 (diff)
downloadtoolchain_gcc-deec799746e92ab0487eca489499ade08a2610bf.zip
toolchain_gcc-deec799746e92ab0487eca489499ade08a2610bf.tar.gz
toolchain_gcc-deec799746e92ab0487eca489499ade08a2610bf.tar.bz2
[GCC] Commit retpoline patch code, for fixing security issues.
This applies the Intel GCC code patches, to allow compiling with appropriate flags for mitigating the indirect branch variant of the speculative execution security flaw. Bug: None Test: This is already in place in ChromeOS and has been tested on the ChromeOS kernels. Change-Id: Ideffb433b697f1fe7e4ca2c1eaa968160abfcc8b
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
new file mode 100644
index 0000000..58347f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
@@ -0,0 +1,43 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mfunction-return=keep -fno-pic" } */
+
+void func0 (void);
+void func1 (void);
+void func2 (void);
+void func3 (void);
+void func4 (void);
+void func5 (void);
+
+__attribute__ ((indirect_branch("thunk-extern")))
+void
+bar (int i)
+{
+ switch (i)
+ {
+ default:
+ func0 ();
+ break;
+ case 1:
+ func1 ();
+ break;
+ case 2:
+ func2 ();
+ break;
+ case 3:
+ func3 ();
+ break;
+ case 4:
+ func4 ();
+ break;
+ case 5:
+ func5 ();
+ break;
+ }
+}
+
+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { ! x32 } } } } */
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86.indirect_thunk\.(r|e)ax" { target x32 } } } */
+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86.indirect_thunk" } } */
+/* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */