diff options
Diffstat (limited to 'lang/gcc48/files/patch-stackprotector-gcc_testsuite')
-rw-r--r-- | lang/gcc48/files/patch-stackprotector-gcc_testsuite | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/lang/gcc48/files/patch-stackprotector-gcc_testsuite b/lang/gcc48/files/patch-stackprotector-gcc_testsuite deleted file mode 100644 index 8200bb7e4c28..000000000000 --- a/lang/gcc48/files/patch-stackprotector-gcc_testsuite +++ /dev/null @@ -1,177 +0,0 @@ ---- UTC ---- /dev/null -+++ gcc/testsuite/g++.dg/fstack-protector-strong.C -@@ -0,0 +1,35 @@ -+/* Test that stack protection is done on chosen functions. */ -+ -+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ -+/* { dg-options "-O2 -fstack-protector-strong" } */ -+ -+class A -+{ -+public: -+ A() {} -+ ~A() {} -+ void method(); -+ int state; -+}; -+ -+/* Frame address exposed to A::method via "this". */ -+int -+foo1 () -+{ -+ A a; -+ a.method (); -+ return a.state; -+} -+ -+/* Possible destroying foo2's stack via &a. */ -+int -+global_func (A& a); -+ -+/* Frame address exposed to global_func. */ -+int foo2 () -+{ -+ A a; -+ return global_func (a); -+} -+ -+/* { dg-final { scan-assembler-times "stack_chk_fail" 2 } } */ ---- /dev/null -+++ gcc/testsuite/gcc.dg/fstack-protector-strong.c -@@ -0,0 +1,135 @@ -+/* Test that stack protection is done on chosen functions. */ -+ -+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ -+/* { dg-options "-O2 -fstack-protector-strong" } */ -+ -+#include<string.h> -+#include<stdlib.h> -+ -+extern int g0; -+extern int* pg0; -+int -+goo (int *); -+int -+hoo (int); -+ -+/* Function frame address escaped function call. */ -+int -+foo1 () -+{ -+ int i; -+ return goo (&i); -+} -+ -+struct ArrayStruct -+{ -+ int a; -+ int array[10]; -+}; -+ -+struct AA -+{ -+ int b; -+ struct ArrayStruct as; -+}; -+ -+/* Function frame contains array. */ -+int -+foo2 () -+{ -+ struct AA aa; -+ int i; -+ for (i = 0; i < 10; ++i) -+ { -+ aa.as.array[i] = i * (i-1) + i / 2; -+ } -+ return aa.as.array[5]; -+} -+ -+/* Address computation based on a function frame address. */ -+int -+foo3 () -+{ -+ int a; -+ int *p; -+ p = &a + 5; -+ return goo (p); -+} -+ -+/* Address cast based on a function frame address. */ -+int -+foo4 () -+{ -+ int a; -+ return goo (g0 << 2 ? (int *)(3 * (long)(void *)(&a)) : 0); -+} -+ -+/* Address cast based on a local array. */ -+int -+foo5 () -+{ -+ short array[10]; -+ return goo ((int *)(array + 5)); -+} -+ -+struct BB -+{ -+ int one; -+ int two; -+ int three; -+}; -+ -+/* Address computaton based on a function frame address.*/ -+int -+foo6 () -+{ -+ struct BB bb; -+ return goo (&bb.one + sizeof(int)); -+} -+ -+/* Function frame address escaped via global variable. */ -+int -+foo7 () -+{ -+ int a; -+ pg0 = &a; -+ goo (pg0); -+ return *pg0; -+} -+ -+/* Check that this covers -fstack-protector. */ -+int -+foo8 () -+{ -+ char base[100]; -+ memcpy ((void *)base, (const void *)pg0, 105); -+ return (int)(base[32]); -+} -+ -+/* Check that this covers -fstack-protector. */ -+int -+foo9 () -+{ -+ char* p = alloca (100); -+ return goo ((int *)(p + 50)); -+} -+ -+int -+global2 (struct BB* pbb); -+ -+/* Address taken on struct. */ -+int -+foo10 () -+{ -+ struct BB bb; -+ int i; -+ bb.one = global2 (&bb); -+ for (i = 0; i < 10; ++i) -+ { -+ bb.two = bb.one + bb.two; -+ bb.three = bb.one + bb.two + bb.three; -+ } -+ return bb.three; -+} -+ -+/* { dg-final { scan-assembler-times "stack_chk_fail" 10 } } */ |