From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29520 invoked by alias); 21 May 2006 23:04:00 -0000 Received: (qmail 29505 invoked by uid 22791); 21 May 2006 23:03:58 -0000 X-Spam-Check-By: sourceware.org Received: from pool-71-248-179-19.bstnma.fios.verizon.net (HELO cgf.cx) (71.248.179.19) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 21 May 2006 23:03:54 +0000 Received: by cgf.cx (Postfix, from userid 201) id 9A9AA13C01F; Sun, 21 May 2006 19:03:52 -0400 (EDT) Date: Mon, 22 May 2006 03:43:00 -0000 From: Christopher Faylor To: gdb-patches@sourceware.org Subject: [committed] Add option to trap cygwin exceptions Message-ID: <20060521230352.GA31504@trixie.casa.cgf.cx> Mail-Followup-To: gdb-patches@sourceware.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.11 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-05/txt/msg00439.txt.bz2 Cygwin's exception model sometimes give false "SIGSEGV" positives which annoy users. So, recent changes to win32-nat.c and the Cygwin DLL have code to work around this issue. However, this means that debugging the Cygwin DLL becomes more complicated since gdb no longer stops on exceptions within the Cygwin DLL itself. The patch below allow the user (i.e., Corinna or me) to override this behavior. I really need to take a sweep through win32-nat.c and make sure that all of the options are documented. I plan on doing that before I make my next release of gdb for cygwin. cgf 2006-05-21 Christopher Faylor * win32-nat.c (cygwin_exceptions): New variable. (handle_exception): Treat a cygwin exception like a normal exception if cygwin_exceptions is true. (_initialize_win32_nat): Add "set cygwin-exceptions" handler. --- win32-nat.c 10 Apr 2006 21:43:45 -0000 1.122 +++ win32-nat.c 21 May 2006 23:02:00 -0000 @@ -142,6 +142,7 @@ static int saw_create; /* User options. */ static int new_console = 0; +static int cygwin_exceptions = 0; static int new_group = 1; static int debug_exec = 0; /* show execution */ static int debug_events = 0; /* show events from kernel */ @@ -1114,7 +1115,7 @@ handle_exception (struct target_waitstat within the text segment of the DLL itself. */ char *fn; bfd_vma addr = (bfd_vma) current_event.u.Exception.ExceptionRecord.ExceptionAddress; - if ((addr >= cygwin_load_start && addr < cygwin_load_end) + if ((!cygwin_exceptions && (addr >= cygwin_load_start && addr < cygwin_load_end)) || (find_pc_partial_function (addr, &fn, NULL, NULL) && strncmp (fn, "KERNEL32!IsBad", strlen ("KERNEL32!IsBad")) == 0)) return 0; @@ -2437,6 +2438,13 @@ Show use of shell to start subprocess.") NULL, /* FIXME: i18n: */ &setlist, &showlist); + add_setshow_boolean_cmd ("cygwin-exceptions", class_support, &cygwin_exceptions, _("\ +Break when an exception is detected in the Cygwin DLL itself."), _("\ +Show whether gdb breaks on exceptions in the Cygwin DLL itself."), NULL, + NULL, + NULL, /* FIXME: i18n: */ + &setlist, &showlist); + add_setshow_boolean_cmd ("new-console", class_support, &new_console, _("\ Set creation of new console when creating child process."), _("\ Show creation of new console when creating child process."), NULL,