| /* { dg-do run } */ |
| /* { dg-require-effective-target fstack_protector } */ |
| /* { dg-options "-fstack-protector-all -O2" } */ |
| |
| extern volatile long *stack_chk_guard_ptr; |
| |
| void __attribute__ ((noipa)) |
| f (void) |
| { |
| volatile int x; |
| /* Munging the contents of __stack_chk_guard should trigger a |
| stack-smashing failure for this function. */ |
| *stack_chk_guard_ptr += 1; |
| } |
| |
| asm ( |
| " .data\n" |
| " .align 3\n" |
| " .globl stack_chk_guard_ptr\n" |
| "stack_chk_guard_ptr:\n" |
| " .word __stack_chk_guard\n" |
| " .weak __stack_chk_guard\n" |
| "__stack_chk_guard:\n" |
| " .word 0xdead4321\n" |
| " .text\n" |
| " .type __stack_chk_fail, %function\n" |
| "__stack_chk_fail:\n" |
| " movs r0, #0\n" |
| " b exit\n" |
| " .size __stack_chk_fail, .-__stack_chk_fail" |
| ); |
| |
| int |
| main (void) |
| { |
| f (); |
| __builtin_abort (); |
| } |