From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10402 invoked by alias); 2 Jan 2010 21:38:54 -0000 Received: (qmail 10393 invoked by uid 22791); 2 Jan 2010 21:38:53 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from mail.antivirus.flexwebhosting.nl (HELO mail.antivirus.flexwebhosting.nl) (85.92.140.50) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 02 Jan 2010 21:38:48 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.antivirus.flexwebhosting.nl (Postfix) with ESMTP id 0EE6D1218A56 for ; Sat, 2 Jan 2010 22:38:44 +0100 (CET) Received: from mail.antivirus.flexwebhosting.nl ([127.0.0.1]) by localhost (mail.antivirus.flexwebhosting.nl [127.0.0.1]) (amavisd-new, port 10024) with LMTP id w-WhZS-ddEuq for ; Sat, 2 Jan 2010 22:38:38 +0100 (CET) Received: from srv4086.flexwebhosting.nl (unknown [89.18.179.86]) by mail.antivirus.flexwebhosting.nl (Postfix) with ESMTP id 884671218A59 for ; Sat, 2 Jan 2010 22:38:37 +0100 (CET) Received: from ip82-139-82-108.lijbrandt.net ([82.139.82.108] helo=[192.168.2.132]) by srv4086.flexwebhosting.nl with esmtpa (Exim 4.67) (envelope-from ) id 1NRBgE-0005DM-3v for gdb-patches@sourceware.org; Sat, 02 Jan 2010 22:38:38 +0100 Message-ID: <4B3FBCDE.70508@cyberfiber.org> Date: Sat, 02 Jan 2010 21:38:00 -0000 From: Michael User-Agent: Thunderbird 2.0.0.23 (X11/20090817) MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: Re: [RFC] GDB crash with empty executable name (MinGW) References: <20100102124622.GW548@adacore.com> In-Reply-To: <20100102124622.GW548@adacore.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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-01/txt/msg00032.txt.bz2 I don't have my illegal copy of windows present at the moment, I'm so sorry I can't help you :( Hope we can get the boost mailing-list and the gdb mailing-list on the same level. Greetz, Michael Joel Brobecker wrote: > I happened to notice this by accident, because of a bug in our testsuite > that caused us to spawn GDB as ... > > % gdb "" > > ... instead of ... > > % gdb > > ... when we want to start GDB without an executable name. The atypical > command where we launch GDB with an empty exec name causes the crash > on only one of our Windows machines (Win XP 32bit to be exact). To > reproduce: > > % gdb "" > [...] > : No such file or directory. > (gdb) set height 0 > Critical error handler: process 2496 (c:\[...]\gdb.exe) > terminated due to access violation > > It looks like a MinGW bug - while debugging this, GDB receives a SIGTRAP > notification from ntdll: > > (gdb) step > warning: HEAP[toto.exe]: > warning: Heap block at 003E2460 modified at 003E2492 past requested size of 2a > > Program received signal SIGTRAP, Trace/breakpoint trap. > 0x7c91120f in ntdll!DbgUiConnectToDbg () from C:\WINDOWS\system32\ntdll.dll > > The backtrace shows that we're in _mingw_stat and that the _path has > changed from something sensible (the current working directory with a slash > at the end) to something obviously wrong: > > #8 0x0040193b in _mingw_stat ( > _path=0xffffffff
, _st=0x22ff38) > at stat.c:71 > > I can reproduce the same SIGTRAP debugging the following little C program, > even if that little program does not crash. > > | #include > | #include > | #include > | #include > | #include > | > | int > | main (void) > | { > | struct stat st; > | const int status = stat ("c:\\[...]\\bin/", &st); > | void *m; > | > | m = malloc (16); > | printf ("status = %d\n", status); > | free (m); > | return (m == NULL); > | } > > I can't confirm that this is a bug though, I haven't been able to find > the assocated file in the MinGW website (file stat.c, around line 71), > and I gave up since. However, I think it's also reasonable to have > a short circuit that immediately returns an error if the file we are > trying to open is empty. If anything this is a minor optimization. > > 2009-01-02 Joel Brobecker > > * source.c (openp): Add assert that parameter string is not NULL. > if parameter string is an empty string, then return with a failure > immediately. > > I have not bothered testing it yet, but I will before checking it in, > if there are no objections. Given how rare it must be to call GDB with > an empty executable name, I do not think that this is a very critical patch. > > Anyone in favor? >