/* { dg-options " -O -fstack-protector-strong -mstack-protector-guard=sysreg -mstack-protector-guard-reg=tpidr2_el0 -mstack-protector-guard-offset=16" } */ /* { dg-final { check-function-bodies "**" "" } } */ void g(void *); __SVBool_t *h(void *); /* ** test1: ** sub sp, sp, #288 ** stp x29, x30, \[sp, #?272\] ** add x29, sp, #?272 ** mrs (x[0-9]+), tpidr2_el0 ** ldr (x[0-9]+), \[\1, #?16\] ** str \2, \[sp, #?264\] ** mov \2, #?0 ** add x0, sp, #?8 ** bl g ** ... ** mrs .* ** ... ** bne .* ** ... ** ldp x29, x30, \[sp, #?272\] ** add sp, sp, #?288 ** ret ** bl __stack_chk_fail */ int test1() { int y[0x40]; g(y); return 1; } /* ** test2: ** stp x29, x30, \[sp, #?-16\]! ** mov x29, sp ** sub sp, sp, #1040 ** mrs (x[0-9]+), tpidr2_el0 ** ldr (x[0-9]+), \[\1, #?16\] ** str \2, \[sp, #?1032\] ** mov \2, #?0 ** add x0, sp, #?8 ** bl g ** ... ** mrs .* ** ... ** bne .* ** ... ** add sp, sp, #?1040 ** ldp x29, x30, \[sp\], #?16 ** ret ** bl __stack_chk_fail */ int test2() { int y[0x100]; g(y); return 1; } #pragma GCC target "+sve" /* ** test3: ** stp x29, x30, \[sp, #?-16\]! ** mov x29, sp ** addvl sp, sp, #-18 ** ... ** str p4, \[sp\] ** ... ** sub sp, sp, #272 ** mrs (x[0-9]+), tpidr2_el0 ** ldr (x[0-9]+), \[\1, #?16\] ** str \2, \[sp, #?264\] ** mov \2, #?0 ** add x0, sp, #?8 ** bl h ** ... ** mrs .* ** ... ** bne .* ** ... ** add sp, sp, #?272 ** ... ** ldr p4, \[sp\] ** ... ** addvl sp, sp, #18 ** ldp x29, x30, \[sp\], #?16 ** ret ** bl __stack_chk_fail */ __SVBool_t test3() { int y[0x40]; return *h(y); }