From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13670 invoked by alias); 4 Apr 2010 21:08:17 -0000 Received: (qmail 13636 invoked by uid 22791); 4 Apr 2010 21:08:06 -0000 X-SWARE-Spam-Status: No, hits=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 04 Apr 2010 21:08:01 +0000 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o34L7xbL014558 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 4 Apr 2010 17:07:59 -0400 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o34L7qTX027864 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 4 Apr 2010 17:07:58 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id o34L7qrf021888 for ; Sun, 4 Apr 2010 23:07:52 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id o34L7pvf021887 for gdb-patches@sourceware.org; Sun, 4 Apr 2010 23:07:51 +0200 Date: Sun, 04 Apr 2010 21:08:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Subject: [patch] Fix breakpoint at *_start Message-ID: <20100404210751.GA21664@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-08-17) X-IsSubscribed: yes 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: 2010-04/txt/msg00059.txt.bz2 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 * 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 * 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 (¤t_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 . + +# 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.*"