(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
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\tx0, " #REG "\n\tbeq\t1f\n"
      22  
      23  asm (
      24  "	.pushsection .data\n"
      25  "	.align	3\n"
      26  "	.globl	stack_chk_guard_ptr\n"
      27  "stack_chk_guard_ptr:\n"
      28  #if __ILP32__
      29  "	.word	__stack_chk_guard\n"
      30  #else
      31  "	.xword	__stack_chk_guard\n"
      32  #endif
      33  "	.weak	__stack_chk_guard\n"
      34  "__stack_chk_guard:\n"
      35  "	.word	0xdead4321\n"
      36  "	.word	0xbeef8765\n"
      37  "	.text\n"
      38  "	.globl	main\n"
      39  "	.type	main, %function\n"
      40  "main:\n"
      41  "	bl	get_ptr\n"
      42  "	str	x0, [sp, #-16]!\n"
      43  "	bl	f\n"
      44  "	str	x0, [sp, #8]\n"
      45  "	ldr	x0, [sp]\n"
      46  #if __ILP32__
      47  "	ldr     w0, [x0]\n"
      48  #else
      49  "	ldr     x0, [x0]\n"
      50  #endif
      51  	CHECK (x1)
      52  	CHECK (x2)
      53  	CHECK (x3)
      54  	CHECK (x4)
      55  	CHECK (x5)
      56  	CHECK (x6)
      57  	CHECK (x7)
      58  	CHECK (x8)
      59  	CHECK (x9)
      60  	CHECK (x10)
      61  	CHECK (x11)
      62  	CHECK (x12)
      63  	CHECK (x13)
      64  	CHECK (x14)
      65  	CHECK (x15)
      66  	CHECK (x16)
      67  	CHECK (x17)
      68  	CHECK (x18)
      69  	CHECK (x19)
      70  	CHECK (x20)
      71  	CHECK (x21)
      72  	CHECK (x22)
      73  	CHECK (x23)
      74  	CHECK (x24)
      75  	CHECK (x25)
      76  	CHECK (x26)
      77  	CHECK (x27)
      78  	CHECK (x28)
      79  	CHECK (x29)
      80  	CHECK (x30)
      81  "	ldr	x1, [sp]\n"
      82  	CHECK (x1)
      83  "	mov	x0, #0\n"
      84  "	b	exit\n"
      85  "1:\n"
      86  "	b	abort\n"
      87  "	.size	main, .-main\n"
      88  "	.popsection"
      89  );