From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27772 invoked by alias); 26 Mar 2009 20:53:39 -0000 Received: (qmail 27763 invoked by uid 22791); 26 Mar 2009 20:53:37 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx2.redhat.com (HELO mx2.redhat.com) (66.187.237.31) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Mar 2009 20:53:29 +0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n2QKrRLw018477 for ; Thu, 26 Mar 2009 16:53:27 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n2QKrKrL021990; Thu, 26 Mar 2009 16:53:20 -0400 Received: from opsy.redhat.com (vpn-12-186.rdu.redhat.com [10.11.12.186]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n2QKrQ7i028024; Thu, 26 Mar 2009 16:53:26 -0400 Received: by opsy.redhat.com (Postfix, from userid 500) id EAE323780B4; Thu, 26 Mar 2009 14:53:24 -0600 (MDT) To: gdb-patches@sourceware.org Subject: RFC: preserve line number when skipping prologue From: Tom Tromey Reply-To: Tom Tromey Date: Thu, 26 Mar 2009 21:06:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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: 2009-03/txt/msg00594.txt.bz2 Jeff Johnston noticed a regression in the CDT test suite when using a recent gdb. The bug is that if you put a breakpoint on a non-executable line before a function's start, gdb displays the breakpoint as being on the function's first line. E.g. consider this program: #include /* Line 3 */ int main() { printf ("hi\n"); /* Line 9 */ return 0; } If I set a breakpoint on line 3, gdb reports line 7. (gdb) b 3 Breakpoint 1 at 0x80483c5: file m.c, line 7. But if I set one on line 9, another non-executable line, gdb reports line 9: (gdb) b 9 Breakpoint 2 at 0x80483d1: file m.c, line 9. I tracked this down to the prologue-skipping code. This patch fixes the problem by preserving the line number when skipping the prologue. I am not sure this is really a valid thing to do -- I'd appreciate comments on that. However, I do think that the principle of reporting the location that the user requested is a valid one. Built and regtested on x86-64 (compile farm). Tom 2009-03-26 Tom Tromey * breakpoint.c (resolve_sal_pc): Preserve original line number when skipping prologue. 2009-03-26 Tom Tromey Update for change to prologue skipping: * gdb.mi/mi2-simplerun.exp: Update. * gdb.mi/mi2-break.exp: Update. * gdb.mi/mi-simplerun.exp: Update. * gdb.mi/mi-break.exp: Update. * gdb.base/ending-run.exp: Update. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 7e50342..750d632 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -5754,7 +5754,12 @@ resolve_sal_pc (struct symtab_and_line *sal) /* If this SAL corresponds to a breakpoint inserted using a line number, then skip the function prologue if necessary. */ if (sal->explicit_line) - skip_prologue_sal (sal); + { + /* Preserve the original line number. */ + int saved_line = sal->line; + skip_prologue_sal (sal); + sal->line = saved_line; + } } if (sal->section == 0 && sal->symtab != NULL) diff --git a/gdb/testsuite/gdb.base/ending-run.exp b/gdb/testsuite/gdb.base/ending-run.exp index 42b4577..cf33602 100644 --- a/gdb/testsuite/gdb.base/ending-run.exp +++ b/gdb/testsuite/gdb.base/ending-run.exp @@ -69,7 +69,7 @@ gdb_expect { gdb_test "b ending-run.c:1" ".*Breakpoint.*4.*" gdb_test "b ending-run.c:14" ".*Note.*also.*Breakpoint.*5.*" "b ending-run.c:14, two" gdb_test "cle ending-run.c:14" \ - ".*Deleted breakpoints 4 5.*" "Cleared 2 by line" + ".*Deleted breakpoint 5.*" "Cleared 2 by line" send_gdb "inf line ending-run.c:14\n" gdb_expect { @@ -77,7 +77,7 @@ gdb_expect { set line_nine $expect_out(1,string) gdb_test "b ending-run.c:14" ".*Breakpoint 6.*ending-run.c, line 14.*" gdb_test "b *$line_nine" ".*Note.*also.*Breakpoint 7.*" "Breakpoint 7 at *ending-run.c:14" - gdb_test "cle" ".*Deleted breakpoints 6 7.*" "Clear 2 by default" + gdb_test "cle" ".*Deleted breakpoints 4 6 7.*" "Clear 2 by default" } -re ".*$gdb_prompt $" { fail "need to fix test for new compile outcome" diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp index 6ea59fc..0f91af7 100644 --- a/gdb/testsuite/gdb.mi/mi-break.exp +++ b/gdb/testsuite/gdb.mi/mi-break.exp @@ -85,11 +85,11 @@ proc test_tbreak_creation_and_listing {} { mi_create_breakpoint "-t basics.c:callee2" 2 del callee2 ".*basics.c" $line_callee2_body $hex \ "insert temp breakpoint at basics.c:callee2" - mi_create_breakpoint "-t basics.c:$line_callee3_head" 3 del callee3 ".*basics.c" $line_callee3_body $hex \ + mi_create_breakpoint "-t basics.c:$line_callee3_head" 3 del callee3 ".*basics.c" $line_callee3_head $hex \ "insert temp breakpoint at basics.c:\$line_callee3_head" # Getting the quoting right is tricky. That is "\"\":$line_callee4_head" - mi_create_breakpoint "-t \"\\\"${srcfile}\\\":$line_callee4_head\"" 4 del callee4 ".*basics.c" $line_callee4_body $hex \ + mi_create_breakpoint "-t \"\\\"${srcfile}\\\":$line_callee4_head\"" 4 del callee4 ".*basics.c" $line_callee4_head $hex \ "insert temp breakpoint at \"\":\$line_callee4_head" mi_gdb_test "666-break-list" \ diff --git a/gdb/testsuite/gdb.mi/mi-simplerun.exp b/gdb/testsuite/gdb.mi/mi-simplerun.exp index 654146a..14a1446 100644 --- a/gdb/testsuite/gdb.mi/mi-simplerun.exp +++ b/gdb/testsuite/gdb.mi/mi-simplerun.exp @@ -74,10 +74,10 @@ proc test_breakpoints_creation_and_listing {} { mi_create_breakpoint "basics.c:callee2" 2 keep callee2 ".*basics.c" $line_callee2_body $hex \ "insert breakpoint at basics.c:callee2" - mi_create_breakpoint "basics.c:$line_callee3_head" 3 keep callee3 ".*basics.c" $line_callee3_body $hex \ + mi_create_breakpoint "basics.c:$line_callee3_head" 3 keep callee3 ".*basics.c" $line_callee3_head $hex \ "insert breakpoint at basics.c:\$line_callee3_head" - mi_create_breakpoint "\"\\\"${srcfile}\\\":$line_callee4_head\"" 4 keep callee4 ".*basics.c" $line_callee4_body $hex \ + mi_create_breakpoint "\"\\\"${srcfile}\\\":$line_callee4_head\"" 4 keep callee4 ".*basics.c" $line_callee4_head $hex \ "insert breakpoint at \"\":\$line_callee4_head" mi_gdb_test "204-break-list" \ diff --git a/gdb/testsuite/gdb.mi/mi2-break.exp b/gdb/testsuite/gdb.mi/mi2-break.exp index d08081a..7f43315 100644 --- a/gdb/testsuite/gdb.mi/mi2-break.exp +++ b/gdb/testsuite/gdb.mi/mi2-break.exp @@ -85,11 +85,11 @@ proc test_tbreak_creation_and_listing {} { mi_create_breakpoint "-t basics.c:callee2" 2 del callee2 ".*basics.c" $line_callee2_body $hex \ "insert temp breakpoint at basics.c:callee2" - mi_create_breakpoint "-t basics.c:$line_callee3_head" 3 del callee3 ".*basics.c" $line_callee3_body $hex \ + mi_create_breakpoint "-t basics.c:$line_callee3_head" 3 del callee3 ".*basics.c" $line_callee3_head $hex \ "insert temp breakpoint at basics.c:\$line_callee3_head" # Getting the quoting right is tricky. That is "\"\":$line_callee4_head" - mi_create_breakpoint "-t \"\\\"${srcfile}\\\":$line_callee4_head\"" 4 del callee4 ".*basics.c" $line_callee4_body $hex \ + mi_create_breakpoint "-t \"\\\"${srcfile}\\\":$line_callee4_head\"" 4 del callee4 ".*basics.c" $line_callee4_head $hex \ "insert temp breakpoint at \"\":\$line_callee4_head" mi_gdb_test "666-break-list" \ diff --git a/gdb/testsuite/gdb.mi/mi2-simplerun.exp b/gdb/testsuite/gdb.mi/mi2-simplerun.exp index eddb2ed..13443ee 100644 --- a/gdb/testsuite/gdb.mi/mi2-simplerun.exp +++ b/gdb/testsuite/gdb.mi/mi2-simplerun.exp @@ -74,10 +74,10 @@ proc test_breakpoints_creation_and_listing {} { mi_create_breakpoint "basics.c:callee2" 2 keep callee2 ".*basics.c" $line_callee2_body $hex \ "insert breakpoint at basics.c:callee2" - mi_create_breakpoint "basics.c:$line_callee3_head" 3 keep callee3 ".*basics.c" $line_callee3_body $hex \ + mi_create_breakpoint "basics.c:$line_callee3_head" 3 keep callee3 ".*basics.c" $line_callee3_head $hex \ "insert breakpoint at basics.c:\$line_callee3_head" - mi_create_breakpoint "\"\\\"${srcfile}\\\":$line_callee4_head\"" 4 keep callee4 ".*basics.c" $line_callee4_body $hex \ + mi_create_breakpoint "\"\\\"${srcfile}\\\":$line_callee4_head\"" 4 keep callee4 ".*basics.c" $line_callee4_head $hex \ "insert breakpoint at \"\":\$line_callee4_head" mi_gdb_test "204-break-list" \