From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19157 invoked by alias); 10 Jan 2007 23:39:09 -0000 Received: (qmail 19072 invoked by uid 22791); 10 Jan 2007 23:39:08 -0000 X-Spam-Check-By: sourceware.org Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.31.1) with ESMTP; Wed, 10 Jan 2007 23:39:03 +0000 Received: from drow by nevyn.them.org with local (Exim 4.63) (envelope-from ) id 1H4n1y-0005iR-9r; Wed, 10 Jan 2007 18:38:54 -0500 Date: Wed, 10 Jan 2007 23:39:00 -0000 From: Daniel Jacobowitz To: Greg Watson Cc: gcc@gcc.gnu.org, gdb@sources.redhat.com Subject: Re: main(), registers and gdb Message-ID: <20070110233854.GA21874@nevyn.them.org> Mail-Followup-To: Greg Watson , gcc@gcc.gnu.org, gdb@sources.redhat.com References: <7E9915AE-D47F-45B0-A922-D0C0C3A1D39A@computer.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <7E9915AE-D47F-45B0-A922-D0C0C3A1D39A@computer.org> User-Agent: Mutt/1.5.13 (2006-08-11) X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2007-01/txt/msg00185.txt.bz2 On Wed, Jan 10, 2007 at 04:32:48PM -0700, Greg Watson wrote: > If the following code is compiled with 'gcc -g -O0 -o test test.c', > the address of argc is passed into func() in the ecx register. Since > ecx is not preserved after the call to printf(), the address of argc > is corrupted on return from func(). Normally this would not be a > problem, since argc is never used in the code. This is a typical problem. There is not much that can be done about it, although I remember once hearing a proposal that GCC should forcibly extend the live ranges of local variables (or at least arguments) at -O0 to improve debugging. That seems sensible to me. > However, when run under gdb, commands that view the stack frame > produce strange results, and some commands (e.g. -var-update) > actually crash the debugger. A crash is always a bug. > Breakpoint 1, main (argc=1, argv=0xbffcef14) at test.c:14 > 12 func(&argc); > (gdb) n > in func > 14 printf("hello\n"); > (gdb) where > #0 main (argc=Cannot access memory at address 0x4 > ) at test.c:16 And honestly, I have no idea how that happened. Does it happen with a current GDB? I suspect from the error message that this one is not too recent. -- Daniel Jacobowitz CodeSourcery