Daily bump.
[official-gcc.git] / gcc / testsuite / gcc.target / arm / stack-protector-1.c
blob3f0ffc9c3f319d566b1a51d635bbd799e2784e58
1 /* { dg-do run } */
2 /* { dg-require-effective-target fstack_protector } */
3 /* { dg-options "-fstack-protector-all -O2" } */
5 extern volatile long *stack_chk_guard_ptr;
7 volatile long *
8 get_ptr (void)
10 return stack_chk_guard_ptr;
13 void __attribute__ ((noipa))
14 f (void)
16 volatile int x;
17 x = 1;
18 x += 1;
21 #define CHECK(REG) "\tcmp\tr0, " #REG "\n\tbeq\t1f\n"
23 asm (
24 " .data\n"
25 " .align 3\n"
26 " .globl stack_chk_guard_ptr\n"
27 "stack_chk_guard_ptr:\n"
28 " .word __stack_chk_guard\n"
29 " .weak __stack_chk_guard\n"
30 "__stack_chk_guard:\n"
31 " .word 0xdead4321\n"
32 " .text\n"
33 " .globl main\n"
34 " .type main, %function\n"
35 "main:\n"
36 " bl get_ptr\n"
37 " sub sp, sp, #8\n"
38 " str r0, [sp]\n"
39 " bl f\n"
40 " str r0, [sp, #4]\n"
41 " ldr r0, [sp]\n"
42 " ldr r0, [r0]\n"
43 CHECK (r1)
44 CHECK (r2)
45 CHECK (r3)
46 CHECK (r4)
47 CHECK (r5)
48 CHECK (r6)
49 CHECK (r7)
50 CHECK (r8)
51 CHECK (r9)
52 CHECK (r10)
53 CHECK (r11)
54 CHECK (r12)
55 CHECK (r14)
56 " ldr r1, [sp, #4]\n"
57 CHECK (r1)
58 " mov r0, #0\n"
59 " bl exit\n"
60 "1:\n"
61 " bl abort\n"
62 " .size main, .-main"