From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1142 invoked by alias); 5 Sep 2008 10:53:11 -0000 Received: (qmail 1130 invoked by uid 22791); 5 Sep 2008 10:53:09 -0000 X-Spam-Check-By: sourceware.org Received: from mel.act-europe.fr (HELO mel.act-europe.fr) (212.99.106.210) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 05 Sep 2008 10:52:19 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id 9DC7529000F; Fri, 5 Sep 2008 12:52:16 +0200 (CEST) Received: from mel.act-europe.fr ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ziwy-v0X+Wvc; Fri, 5 Sep 2008 12:52:15 +0200 (CEST) Received: from province.act-europe.fr (province.act-europe.fr [10.10.0.214]) by mel.act-europe.fr (Postfix) with ESMTP id D48DE290009 for ; Fri, 5 Sep 2008 12:52:15 +0200 (CEST) Received: by province.act-europe.fr (Postfix, from userid 560) id C04F5167310; Fri, 5 Sep 2008 12:52:15 +0200 (CEST) Date: Fri, 05 Sep 2008 10:53:00 -0000 From: Jerome Guitton To: gdb-patches@sourceware.org Subject: [RFA/testsuite] stack check Message-ID: <20080905105215.GA42811@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="jq0ap7NbKX2Kqbes" Content-Disposition: inline User-Agent: Mutt/1.5.17 (2007-11-01) Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-09/txt/msg00089.txt.bz2 --jq0ap7NbKX2Kqbes Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 736 Follow-up to http://sourceware.org/ml/gdb-patches/2008-09/msg00007.html Test that the different possible stack checking sequences are properly skipped when analyzing a prologue on PPC AIX. OK to apply? 2008-09-05 Jerome Guitton * powerpc-aix-prologue.c (stack_check_probe_1, stack_check_probe_2) (stack_check_probe_loop_1, stack_check_probe_loop_2): New functions. (main): Add call to these new functions. * powerpc-aix-prologue.exp: When breaking on these functions, check that the breakpoint is inserted at the appropriate location. (insert_breakpoint): Slightly refine this procedure so that it can be called several times in the test. Thanks, Jerome --jq0ap7NbKX2Kqbes Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="powerpc-aix-prologue.diff" Content-length: 5685 Index: testsuite/gdb.arch/powerpc-aix-prologue.exp =================================================================== --- testsuite/gdb.arch/powerpc-aix-prologue.exp (revision 134842) +++ testsuite/gdb.arch/powerpc-aix-prologue.exp (working copy) @@ -55,7 +55,7 @@ proc insert_breakpoint {function expecte # Insert a breakpoint using the given function name, and extract # the breakpoint address for the output. gdb_test_multiple "break $function" "set breakpoint in $function" { - -re "Breakpoint 1 at ($hex).*$gdb_prompt $" { + -re "Breakpoint .* at ($hex).*$gdb_prompt $" { set address $expect_out(1,string) } default { @@ -79,3 +79,8 @@ proc insert_breakpoint {function expecte } insert_breakpoint "li_stw" 12 +insert_breakpoint "stack_check_probe_1" 16 +insert_breakpoint "stack_check_probe_2" 40 +insert_breakpoint "stack_check_probe_loop_1" 68 +insert_breakpoint "stack_check_probe_loop_2" 60 + Index: testsuite/gdb.arch/powerpc-aix-prologue.c =================================================================== --- testsuite/gdb.arch/powerpc-aix-prologue.c (revision 134842) +++ testsuite/gdb.arch/powerpc-aix-prologue.c (working copy) @@ -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"); --jq0ap7NbKX2Kqbes--