/* { 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; } #define CHECK(REG) "\tcmp\tx0, " #REG "\n\tbeq\t1f\n" asm ( " .pushsection .data\n" " .align 3\n" "stack_chk_guard_ptr:\n" #if __ILP32__ " .word __stack_chk_guard\n" #else " .xword __stack_chk_guard\n" #endif " .weak __stack_chk_guard\n" "__stack_chk_guard:\n" " .word 0xdead4321\n" " .word 0xbeef8765\n" " .text\n" " .type __stack_chk_fail, %function\n" "__stack_chk_fail:\n" " mov x0, #0\n" " b exit\n" " .size __stack_chk_fail, .-__stack_chk_fail\n" " .popsection" ); int main (void) { f (); __builtin_abort (); }