summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/pr81780-1.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-10-24 05:24:58 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-12-08 05:01:04 -0800
commit7a2bea21f2854f1a7ad44c90fbb687f70c039144 (patch)
tree14e1d6368cc4e2c6d2f87ae5b8a0cdcd658713e3 /gcc/testsuite/gcc.target/i386/pr81780-1.c
parent6dbe66991c8e91806e5e666b400bfce918f618a3 (diff)
downloadgcc-hjl/pr81780.tar.gz
i386: Avoid PLT when shadow stack is enabledhjl/pr81780
PLT should be avoided with shadow stack in 32-bit mode if more than 2 parameters are passed in registers since only 2 parameters can be passed in registers for external function calls via PLT with shadow stack enabled. gcc/ PR target/81780 * config/i386/i386.c (ix86_noplt_attribute_p): New function. (ix86_expand_call): Use it. (ix86_nopic_noplt_attribute_p): Likewise. gcc/testsuite/ PR target/81780 * gcc.target/i386/pr81780-1.c: New test. * gcc.target/i386/pr81780-2.c: Likewise. * gcc.target/i386/pr81780-3.c: Likewise. * gcc.target/i386/pr81780-4.c: Likewise.
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/pr81780-1.c')
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81780-1.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr81780-1.c b/gcc/testsuite/gcc.target/i386/pr81780-1.c
new file mode 100644
index 00000000000..f5a28020782
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81780-1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { *-*-linux* && ia32 } } } */
+/* { dg-require-effective-target got32x_reloc } */
+/* { dg-options "-fcf-protection -mcet -O2 -fno-pic -fplt" } */
+
+extern void bar (int) __attribute__ ((regparm (3)));
+
+int
+foo (int i)
+{
+ bar (i);
+ return 0;
+}
+
+/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT" } } */