diff options
Diffstat (limited to 'gdb/testsuite/gdb.arch/powerpc-aix-prologue.c')
-rw-r--r-- | gdb/testsuite/gdb.arch/powerpc-aix-prologue.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c b/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c index 284aa05..c0cdd83 100644 --- a/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c +++ b/gdb/testsuite/gdb.arch/powerpc-aix-prologue.c @@ -17,10 +17,19 @@ void li_stw (void); +void stack_check_probe_1 (void); +void stack_check_probe_2 (void); +void stack_check_probe_loop_1 (void); +void stack_check_probe_loop_2 (void); + int main (void) { li_stw (); + stack_check_probe_1 (); + stack_check_probe_2 (); + stack_check_probe_loop_1 (); + stack_check_probe_loop_2 (); return 0; } @@ -51,3 +60,125 @@ asm (" .csect .text[PR]\n" " lwz 31,-4(1)\n" " blr\n"); +/* Asm for procedure stack_check_probe_1(). + + The purpose of this function is to verify that GDB can skip the stack + checking probing at the beginning of the prologue. */ + +asm (" .csect .text[PR]\n" + " .align 2\n" + " .globl stack_check_probe_1\n" + " .globl .stack_check_probe_1\n" + " .csect stack_check_probe_1[DS]\n" + "stack_check_probe_1:\n" + " .long .stack_check_probe_1, TOC[tc0], 0\n" + " .csect .text[PR]\n" + ".stack_check_probe_1:\n" + " stw 0,-12336(1)\n" + " stw 31,-4(1)\n" + " stwu 1,-48(1)\n" + " mr 31,1\n" + " lwz 1,0(1)\n" + " lwz 31,-4(1)\n" + " blr\n"); + +/* Asm for procedure stack_check_probe_2 (). + + Similar to stack_check_probe_1, but with a different probing sequence + (several probes). */ + +asm (" .csect .text[PR]\n" + " .align 2\n" + " .globl stack_check_probe_2\n" + " .globl .stack_check_probe_2\n" + " .csect stack_check_probe_2[DS]\n" + "stack_check_probe_2:\n" + " .long .stack_check_probe_2, TOC[tc0], 0\n" + " .csect .text[PR]\n" + ".stack_check_probe_2:\n" + " stw 0,-16384(1)\n" + " stw 0,-20480(1)\n" + " stw 0,-24576(1)\n" + " stw 0,-28672(1)\n" + " stw 0,-28752(1)\n" + " mflr 0\n" + " stw 31,-4(1)\n" + " stw 0,8(1)\n" + " stwu 1,-16464(1)\n" + " mr 31,1\n" + " lwz 1,0(1)\n" + " lwz 0,8(1)\n" + " mtlr 0\n" + " lwz 31,-4(1)\n" + " blr\n"); + +/* Asm for procedure stack_check_probe_loop_1() and stack_check_probe_loop_2(). + + Similar to stack_check_probe_1, but with a different probing sequence + (probing loop). */ + +asm (" .csect .text[PR]\n" + " .align 2\n" + " .globl stack_check_probe_loop_1\n" + " .globl .stack_check_probe_loop_1\n" + " .csect stack_check_probe_loop_1[DS]\n" + "stack_check_probe_loop_1:\n" + " .long .stack_check_probe_loop_1, TOC[tc0], 0\n" + " .csect .text[PR]\n" + ".stack_check_probe_loop_1:\n" + " addi 12,1,-12288\n" + " lis 0,-8\n" + " ori 0,0,4096\n" + " add 0,12,0\n" + "LPSRL1..0:\n" + " cmpw 0,12,0\n" + " beq 0,LPSRE1..0\n" + " addi 12,12,-4096\n" + " stw 0,0(12)\n" + " b LPSRL1..0\n" + "LPSRE1..0:\n" + " stw 0,-4080(12)\n" + " mflr 0\n" + " stw 31,-4(1)\n" + " stw 0,8(1)\n" + " lis 0,0xfff8\n" + " ori 0,0,16\n" + " stwux 1,1,0\n" + " mr 31,1\n" + " lwz 1,0(1)\n" + " lwz 0,8(1)\n" + " mtlr 0\n" + " lwz 31,-4(1)\n" + " blr\n"); + +asm (" .csect .text[PR]\n" + " .align 2\n" + " .globl stack_check_probe_loop_2\n" + " .globl .stack_check_probe_loop_2\n" + " .csect stack_check_probe_loop_2[DS]\n" + "stack_check_probe_loop_2:\n" + " .long .stack_check_probe_loop_2, TOC[tc0], 0\n" + " .csect .text[PR]\n" + ".stack_check_probe_loop_2:\n" + " addi 12,1,-12288\n" + " lis 0,-8\n" + " add 0,12,0\n" + "LPSRL2..0:\n" + " cmpw 0,12,0\n" + " beq 0,LPSRE2..0\n" + " addi 12,12,-4096\n" + " stw 0,0(12)\n" + " b LPSRL2..0\n" + "LPSRE2..0:\n" + " mflr 0\n" + " stw 31,-4(1)\n" + " stw 0,8(1)\n" + " lis 0,0xfff8\n" + " ori 0,0,16\n" + " stwux 1,1,0\n" + " mr 31,1\n" + " lwz 1,0(1)\n" + " lwz 0,8(1)\n" + " mtlr 0\n" + " lwz 31,-4(1)\n" + " blr\n"); |