From: "Tiago Stürmer Daitx" <tdaitx@linux.vnet.ibm.com>
To: gdb-patches@sourceware.org
Cc: emachado@linux.vnet.ibm.com, Ulrich.Weigand@de.ibm.com
Subject: [PATCH] Fix handling of #include files during prologue skipping
Date: Wed, 23 Jan 2013 20:34:00 -0000 [thread overview]
Message-ID: <51004922.0VYgHGakDPQGcTqV%tdaitx@linux.vnet.ibm.com> (raw)
In symtab.c:skip_prologue_using_sal, the code goes through the SAL markers
starting from the beginning of the function, and checks for markers with the
same (or increasing line numbers). The idea behind this is that if one gets
decreasing line numbers, than one probably have the case where the optimizer
scheduled code from later in the function into the prologue.
However, the problem was that this code was simply comparing the line
*numbers* -- even if they refered to a different file! That's why the
presence of the comment makes a difference, because it makes the line
number in t.c larger (or smaller) than the line number in t.h.
This patch simply considers a change in file equivalent to an
increasing line number.
Before the fix:
$ gdb prologue-include
[snip]
(gdb) break main
Breakpoint 1 at 0x10000594: file prologue-include.h, line 2.
After the fix:
$ gdb prologue-include
[snip]
(gdb) break main
Breakpoint 1 at 0x1000058c: file prologue-include.h, line 1.
No regressions detected on PPC32, PPC64, and AMD64.
Regards,
Tiago Daitx
---
gdb/ChangeLog
2013-01-23 Ulrich Weigand <uweigand@de.ibm.com>
* symtab.c (skip_prologue_using_sal): Consider a file
change the same as an increased line number
gdb/testsuite/ChangeLog
2013-01-23 Tiago Stürmer Daitx <tdaitx@linux.vnet.ibm.com>
* gdb.base/prologue-include.c: New file.
* gdb.base/prologue-include.exp: New file.
* gdb.base/prologue-include.h: New file.
diff --git a/gdb/symtab.c b/gdb/symtab.c
index d40436a..b200b36 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4905,6 +4905,10 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr)
line mark the prologue -> body transition. */
if (sal.line >= prologue_sal.line)
break;
+ /* Likewise if we are in a different symtab altogether
+ (e.g. within a file included via #include). */
+ if (sal.symtab != prologue_sal.symtab)
+ break;
/* The line number is smaller. Check that it's from the
same function, not something inlined. If it's inlined,
diff --git a/gdb/testsuite/gdb.base/prologue-include.c b/gdb/testsuite/gdb.base/prologue-include.c
new file mode 100644
index 0000000..b39e24d
--- /dev/null
+++ b/gdb/testsuite/gdb.base/prologue-include.c
@@ -0,0 +1,25 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2012-2013 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+int
+main (void)
+{
+ int i, j;
+#include "prologue-include.h"
+ return 0;
+}
+
diff --git a/gdb/testsuite/gdb.base/prologue-include.exp b/gdb/testsuite/gdb.base/prologue-include.exp
new file mode 100644
index 0000000..89fdc1f
--- /dev/null
+++ b/gdb/testsuite/gdb.base/prologue-include.exp
@@ -0,0 +1,24 @@
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+standard_testfile
+
+if { [prepare_for_testing ${testfile}.exp ${testfile}] } {
+ return -1
+}
+
+gdb_test "break main" \
+ "Breakpoint.*at.* file .*$testfile.h, line 1\\." \
+ "breakpoint main"
diff --git a/gdb/testsuite/gdb.base/prologue-include.h b/gdb/testsuite/gdb.base/prologue-include.h
new file mode 100644
index 0000000..34b920c
--- /dev/null
+++ b/gdb/testsuite/gdb.base/prologue-include.h
@@ -0,0 +1,2 @@
+ i = 2;
+ j = 2;
next reply other threads:[~2013-01-23 20:34 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-23 20:34 Tiago Stürmer Daitx [this message]
2013-01-23 20:44 ` Tom Tromey
2013-01-24 0:52 ` Yao Qi
2013-01-24 3:19 ` Tiago Stürmer Daitx
2013-01-24 3:42 ` Yao Qi
2013-01-24 6:23 ` Joel Brobecker
2013-01-24 11:13 ` Pedro Alves
2013-01-24 12:56 ` Ulrich Weigand
2013-01-24 13:11 ` Tiago Stürmer Daitx
2013-01-24 14:28 ` Tiago Stürmer Daitx
2013-01-24 15:01 ` Tiago Stürmer Daitx
2013-01-24 15:12 ` Tom Tromey
2013-01-24 20:43 ` Tiago Stürmer Daitx
-- strict thread matches above, loose matches on Subject: below --
2013-01-23 18:39 Tiago Stürmer Daitx
2013-01-23 19:30 ` Ulrich Weigand
2013-01-23 19:38 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51004922.0VYgHGakDPQGcTqV%tdaitx@linux.vnet.ibm.com \
--to=tdaitx@linux.vnet.ibm.com \
--cc=Ulrich.Weigand@de.ibm.com \
--cc=emachado@linux.vnet.ibm.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox