public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [patch] Fix breakpoint at *_start
@ 2010-04-04 21:08 Jan Kratochvil
  2010-04-04 21:46 ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Kratochvil @ 2010-04-04 21:08 UTC (permalink / raw)
  To: gdb-patches

Hi,

(gdb) b *_start
Breakpoint 1 at 0x4002c0
(gdb) r
Starting program:
/home/.../static-executable
Program exited normally.
(gdb) _

Goal of the patch is to prevent setting proceed's ONEPROC.

In some way it makes sense what GDB has been doing so far - program was being
executed by /bin/sh and now it just stopped at address _start.  GDB logic says
it should ignore breakpoints right at the PC address during "continue".

No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.

Bugreport has been kept updated by the courtesy of John Reiser since 2005.


Thanks,
Jan


Gdb/
2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* infcmd.c (run_command_1): Call proceed with regcache_read_pc address.
	* config/djgpp/fnchange.lst: Add translation for break-static-entry.exp.

gdb/testsuite/
2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.base/break-static-entry.exp: New.

--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -580,8 +580,9 @@ run_command_1 (char *args, int from_tty, int tbreak_at_main)
      has done its thing; now we are setting up the running program.  */
   post_create_inferior (&current_target, 0);
 
-  /* Start the target running.  */
-  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);
+  /* Start the target running.  Do not use -1 continuation as it would skip
+     breakpoint right at the entry point.  */
+  proceed (regcache_read_pc (get_current_regcache ()), TARGET_SIGNAL_0, 0);
 
   /* Since there was no error, there's no need to finish the thread
      states here.  */
--- a/gdb/config/djgpp/fnchange.lst
+++ b/gdb/config/djgpp/fnchange.lst
@@ -371,6 +371,7 @@
 @V@/gdb/testsuite/gdb.arch/powerpc-prologue.exp @V@/gdb/testsuite/gdb.arch/ppc-prologue.exp
 @V@/gdb/testsuite/gdb.base/bitfields2.c @V@/gdb/testsuite/gdb.base/bitfiel2.c
 @V@/gdb/testsuite/gdb.base/bitfields2.exp @V@/gdb/testsuite/gdb.base/bitfiel2.exp
+@V@/gdb/testsuite/gdb.base/break-static-entry.exp @V@/gdb/testsuite/gdb.base/brksentr.exp
 @V@/gdb/testsuite/gdb.base/coremaker2.c @V@/gdb/testsuite/gdb.base/core2maker.c
 @V@/gdb/testsuite/gdb.base/hashline1.exp @V@/gdb/testsuite/gdb.base/hash1line.exp
 @V@/gdb/testsuite/gdb.base/hashline2.exp @V@/gdb/testsuite/gdb.base/hash2line.exp
--- /dev/null
+++ b/gdb/testsuite/gdb.base/break-static-entry.exp
@@ -0,0 +1,43 @@
+# Copyright (C) 2010 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/>.
+
+# Test inferior can stop at its very first instruction, usually "_start".
+# Dynamic executables have first instruction in ld.so.
+
+set testfile break-static-entry
+if { [prepare_for_testing ${testfile}.exp ${testfile} start.c {additional_flags=-static}] } {
+    return -1
+}
+
+set test "info files"
+set entry ""
+gdb_test_multiple $test $test {
+    -re "\r\n\[\t \]*Entry point:\[\t \]*(0x\[0-9a-f\]+)\r\n.*$gdb_prompt $" {
+	set entry $expect_out(1,string)
+	pass $test
+    }
+}
+if {$entry == ""} {
+    untested ${testfile}.exp
+    return
+}
+
+if ![runto "*$entry"] {
+    return
+}
+gdb_test {p/x $pc} " = $entry"
+
+gdb_breakpoint "main"
+gdb_continue_to_breakpoint "main" "main.*"

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Fix breakpoint at *_start
  2010-04-04 21:08 [patch] Fix breakpoint at *_start Jan Kratochvil
@ 2010-04-04 21:46 ` Pedro Alves
  2010-04-04 21:57   ` Jan Kratochvil
  0 siblings, 1 reply; 6+ messages in thread
From: Pedro Alves @ 2010-04-04 21:46 UTC (permalink / raw)
  To: gdb-patches; +Cc: Jan Kratochvil

On Sunday 04 April 2010 22:07:51, Jan Kratochvil wrote:
> Bugreport has been kept updated by the courtesy of John Reiser since 2005.

What bug report?  A PR?

> Gdb/
> 2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
> 
>         * infcmd.c (run_command_1): Call proceed with regcache_read_pc address.
>         * config/djgpp/fnchange.lst: Add translation for break-static-entry.exp.
> 
> gdb/testsuite/
> 2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
> 
>         * gdb.base/break-static-entry.exp: New.

This is OK.

The need for -static is a test implementation detail on systems
with a userspace dynamic loader à la ld.so.  Can I convince you
to remove "static" from the test name?

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Fix breakpoint at *_start
  2010-04-04 21:46 ` Pedro Alves
@ 2010-04-04 21:57   ` Jan Kratochvil
  2010-04-04 22:04     ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Kratochvil @ 2010-04-04 21:57 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches

On Sun, 04 Apr 2010 23:45:58 +0200, Pedro Alves wrote:
> On Sunday 04 April 2010 22:07:51, Jan Kratochvil wrote:
> > Bugreport has been kept updated by the courtesy of John Reiser since 2005.
> 
> What bug report?  A PR?

https://bugzilla.redhat.com/show_bug.cgi?id=162775

But found now GDB PR 9436 for it.


> The need for -static is a test implementation detail on systems
> with a userspace dynamic loader à la ld.so.  Can I convince you
> to remove "static" from the test name?

Do those systems support (=ignore) the "-static" flag?


Thanks,
Jan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Fix breakpoint at *_start
  2010-04-04 21:57   ` Jan Kratochvil
@ 2010-04-04 22:04     ` Pedro Alves
  2010-04-04 22:17       ` Jan Kratochvil
  0 siblings, 1 reply; 6+ messages in thread
From: Pedro Alves @ 2010-04-04 22:04 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: gdb-patches

On Sunday 04 April 2010 22:57:24, Jan Kratochvil wrote:
> On Sun, 04 Apr 2010 23:45:58 +0200, Pedro Alves wrote:
> > On Sunday 04 April 2010 22:07:51, Jan Kratochvil wrote:
> > > Bugreport has been kept updated by the courtesy of John Reiser since 2005.
> > 
> > What bug report?  A PR?
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=162775
> 
> But found now GDB PR 9436 for it.

I think you should still leave 9436 open.  There's more
to fix described in the PR.  Maybe close PR9341, though.

> > The need for -static is a test implementation detail on systems
> > with a userspace dynamic loader à la ld.so.  Can I convince you
> > to remove "static" from the test name?
> 
> Do those systems support (=ignore) the "-static" flag?

I can't speak for all systems, but it's conceivable we'll
find some that don't.  Most do support it.  But then,
non ld.so-ish target's won't need -static to trigger the
problem.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Fix breakpoint at *_start
  2010-04-04 22:04     ` Pedro Alves
@ 2010-04-04 22:17       ` Jan Kratochvil
  2010-04-04 22:21         ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Jan Kratochvil @ 2010-04-04 22:17 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches

On Mon, 05 Apr 2010 00:04:22 +0200, Pedro Alves wrote:
> I think you should still leave 9436 open.  There's more
> to fix described in the PR.  Maybe close PR9341, though.

Done.


> > > The need for -static is a test implementation detail on systems
> > > with a userspace dynamic loader à la ld.so.  Can I convince you
> > > to remove "static" from the test name?
> > 
> > Do those systems support (=ignore) the "-static" flag?
> 
> I can't speak for all systems, but it's conceivable we'll
> find some that don't.  Most do support it.  But then,
> non ld.so-ish target's won't need -static to trigger the
> problem.

OK; checked-in just the renamed unchanged version, though.


Thanks,
Jan


http://sourceware.org/ml/gdb-cvs/2010-04/msg00029.html

--- src/gdb/ChangeLog	2010/04/04 13:54:42	1.11568
+++ src/gdb/ChangeLog	2010/04/04 22:12:04	1.11569
@@ -1,5 +1,10 @@
 2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
+	* infcmd.c (run_command_1): Call proceed with regcache_read_pc address.
+	* config/djgpp/fnchange.lst: Add translation for break-entry.exp.
+
+2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
 	* breakpoint.c (bpstat_find_step_resume_breakpoint): Remove.
 	* breakpoint.h (bpstat_find_step_resume_breakpoint): Remove.
 
--- src/gdb/infcmd.c	2010/03/25 20:48:53	1.263
+++ src/gdb/infcmd.c	2010/04/04 22:12:04	1.264
@@ -580,8 +580,9 @@
      has done its thing; now we are setting up the running program.  */
   post_create_inferior (&current_target, 0);
 
-  /* Start the target running.  */
-  proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);
+  /* Start the target running.  Do not use -1 continuation as it would skip
+     breakpoint right at the entry point.  */
+  proceed (regcache_read_pc (get_current_regcache ()), TARGET_SIGNAL_0, 0);
 
   /* Since there was no error, there's no need to finish the thread
      states here.  */
--- src/gdb/config/djgpp/fnchange.lst	2010/02/01 19:27:55	1.108
+++ src/gdb/config/djgpp/fnchange.lst	2010/04/04 22:12:07	1.109
@@ -371,6 +371,7 @@
 @V@/gdb/testsuite/gdb.arch/powerpc-prologue.exp @V@/gdb/testsuite/gdb.arch/ppc-prologue.exp
 @V@/gdb/testsuite/gdb.base/bitfields2.c @V@/gdb/testsuite/gdb.base/bitfiel2.c
 @V@/gdb/testsuite/gdb.base/bitfields2.exp @V@/gdb/testsuite/gdb.base/bitfiel2.exp
+@V@/gdb/testsuite/gdb.base/break-entry.exp @V@/gdb/testsuite/gdb.base/brkentry.exp
 @V@/gdb/testsuite/gdb.base/coremaker2.c @V@/gdb/testsuite/gdb.base/core2maker.c
 @V@/gdb/testsuite/gdb.base/hashline1.exp @V@/gdb/testsuite/gdb.base/hash1line.exp
 @V@/gdb/testsuite/gdb.base/hashline2.exp @V@/gdb/testsuite/gdb.base/hash2line.exp
--- src/gdb/testsuite/ChangeLog	2010/04/02 05:13:07	1.2218
+++ src/gdb/testsuite/ChangeLog	2010/04/04 22:12:09	1.2219
@@ -1,3 +1,7 @@
+2010-04-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.base/break-entry.exp: New.
+
 2010-04-02  Hui Zhu  <teawater@gmail.com>
             Michael Snyder <msnyder@vmware.com>
 
--- src/gdb/testsuite/gdb.base/break-entry.exp
+++ src/gdb/testsuite/gdb.base/break-entry.exp	2010-04-04 22:15:57.451103000 +0000
@@ -0,0 +1,43 @@
+# Copyright (C) 2010 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/>.
+
+# Test inferior can stop at its very first instruction, usually "_start".
+# Dynamic executables have first instruction in ld.so.
+
+set testfile break-entry
+if { [prepare_for_testing ${testfile}.exp ${testfile} start.c {additional_flags=-static}] } {
+    return -1
+}
+
+set test "info files"
+set entry ""
+gdb_test_multiple $test $test {
+    -re "\r\n\[\t \]*Entry point:\[\t \]*(0x\[0-9a-f\]+)\r\n.*$gdb_prompt $" {
+	set entry $expect_out(1,string)
+	pass $test
+    }
+}
+if {$entry == ""} {
+    untested ${testfile}.exp
+    return
+}
+
+if ![runto "*$entry"] {
+    return
+}
+gdb_test {p/x $pc} " = $entry"
+
+gdb_breakpoint "main"
+gdb_continue_to_breakpoint "main" "main.*"

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch] Fix breakpoint at *_start
  2010-04-04 22:17       ` Jan Kratochvil
@ 2010-04-04 22:21         ` Pedro Alves
  0 siblings, 0 replies; 6+ messages in thread
From: Pedro Alves @ 2010-04-04 22:21 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: gdb-patches

On Sunday 04 April 2010 23:16:58, Jan Kratochvil wrote:
> OK; checked-in just the renamed unchanged version, though.

That's all I asked.  :-)  Thanks much.

-- 
Pedro Alves

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-04-04 22:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-04 21:08 [patch] Fix breakpoint at *_start Jan Kratochvil
2010-04-04 21:46 ` Pedro Alves
2010-04-04 21:57   ` Jan Kratochvil
2010-04-04 22:04     ` Pedro Alves
2010-04-04 22:17       ` Jan Kratochvil
2010-04-04 22:21         ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).