(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
stack-protector-1.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target fstack_protector } */
       3  /* { dg-options "-fstack-protector-all -O2" } */
       4  
       5  extern volatile long *stack_chk_guard_ptr;
       6  
       7  volatile long *
       8  get_ptr (void)
       9  {
      10    return stack_chk_guard_ptr;
      11  }
      12  
      13  void __attribute__ ((noipa))
      14  f (void)
      15  {
      16    volatile int x;
      17    x = 1;
      18    x += 1;
      19  }
      20  
      21  #define CHECK(REG) "\tcmp\tr0, " #REG "\n\tbeq\t1f\n"
      22  
      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"
      63  );