From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4970 invoked by alias); 7 Jan 2009 16:36:48 -0000 Received: (qmail 4949 invoked by uid 22791); 7 Jan 2009 16:36:45 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 07 Jan 2009 16:36:39 +0000 Received: from spaceape12.eur.corp.google.com (spaceape12.eur.corp.google.com [172.28.16.146]) by smtp-out.google.com with ESMTP id n07Gaa5H017555 for ; Wed, 7 Jan 2009 08:36:37 -0800 Received: from rv-out-0708.google.com (rvbf25.prod.google.com [10.140.82.25]) by spaceape12.eur.corp.google.com with ESMTP id n07GaWWA011054 for ; Wed, 7 Jan 2009 08:36:33 -0800 Received: by rv-out-0708.google.com with SMTP id f25so8416861rvb.14 for ; Wed, 07 Jan 2009 08:36:32 -0800 (PST) MIME-Version: 1.0 Received: by 10.141.106.14 with SMTP id i14mr11590279rvm.143.1231346192432; Wed, 07 Jan 2009 08:36:32 -0800 (PST) In-Reply-To: <20090107065222.1E8B81C7A92@localhost> References: <20090107065222.1E8B81C7A92@localhost> Date: Wed, 07 Jan 2009 16:36:00 -0000 Message-ID: Subject: Re: [RFA] dummy frame handling cleanup, plus inferior fun call signal handling improvement From: Doug Evans To: gdb-patches@sourceware.org Cc: pedro@codesourcery.com, uweigand@de.ibm.com Content-Type: text/plain; charset=ISO-8859-1 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: 2009-01/txt/msg00102.txt.bz2 On Tue, Jan 6, 2009 at 10:52 PM, Doug Evans wrote: > Hi. > This version of the patch applies various suggestions to date. > [Modulo changes to stop_pc handling. A patch to change > stop_pc handling can trivially be updated to handle this patch. > This patch handles stop_pc as it exists in the tree today. > OTOH, Pedro, if your patch to change stop_pc handling is going in > soon this can wait ... but I wouldn't mind reaching closure on this > patch ... if that's ok with you of course.] > > Note that proceed() is now called inside TRY_CATCH. > > Ulrich suggested making the error messages more consistent. > I like it but after having gone through the exercise I have a question: > There are two MI testcases that check the precise wording, do we have to worry > about frontends that check the wording? > Maybe changes to the wording can be defered to a later patch? > > This also adds a few more testcases. > > Ok to check in? > > 2009-01-06 Doug Evans > > * dummy-frame.c (dummy_frame): Replace regcache member with > caller_state. > (dummy_frame_push): Replace caller_regcache arg with caller_state. > Return pointer to created dummy frame. All callers updated. > (remove_dummy_frame,do_dummy_frame_cleanup,pop_dummy_frame_from_ptr, > lookup_dummy,lookup_dummy_id,dummy_frame_discard): New fns. > (dummy_frame_pop): Rewrite. Verify requested frame is in the > dummy frame stack. Restore program state. > (cleanup_dummy_frames): Rewrite. > (dummy_frame_sniffer): Update. Make static. > * dummy-frame.h (regcache): Delete forward decl. > (inferior_thread_state,dummy_frame): Add forward decls. > (dummy_frame_push): Update prototype. > (dummy_frame_discard): Declare. > * frame.c (frame_pop): dummy_frame_pop now does all the work for > DUMMY_FRAMEs. > * infcall.c (breakpoint_auto_delete_contents): Delete. > (get_function_name,run_inferior_call): New fns. > (call_function_by_hand): Simplify by moving some code to > get_function_name, run_inferior_call. Inferior function call wrapped > in TRY_CATCH so there's less need for cleanups and all exits from > proceed are handled similarily. Detect program exit. > Detect program stopping in a different thread. > Make error messages more consistent. > * inferior.h (inferior_thread_state): Declare (opaque type). > (save_inferior_thread_state,restore_inferior_thread_state, > make_cleanup_restore_inferior_thread_state, > discard_inferior_thread_state, get_inferior_thread_state_regcache): > Declare. > (save_inferior_status): Update prototype. > * infrun.c: #include "dummy-frame.h" > (normal_stop): When stopped for the completion of an inferior function > call, verify the expected stack frame kind. > (inferior_thread_state): New struct. > (save_inferior_thread_state,restore_inferior_thread_state, > do_restore_inferior_thread_state_cleanup, > make_cleanup_restore_inferior_thread_state, > discard_inferior_thread_state, > get_inferior_thread_state_regcache): New functions. > (inferior_status): Move stop_signal, stop_pc, registers to > inferior_thread_state. Remove restore_stack_info. > (save_inferior_status): Remove arg restore_stack_info. > All callers updated. Remove saving of state now saved by > save_inferior_thread_state. > (restore_inferior_status): Remove restoration of state now done by > restore_inferior_thread_state. > (discard_inferior_status): Remove freeing of registers, now done by > discard_inferior_thread_state. > > * gdb.base/break.exp: Update expected gdb output. > * gdb.base/sepdebug.exp: Ditto. > * gdb.mi/mi-syn-frame.exp: Ditto. > * gdb.mi/mi2-syn-frame.exp: Ditto. > > * gdb.base/call-signal-resume.exp: New file. > * gdb.base/call-signals.c: New file. > * gdb.base/unwindonsignal.exp: New file. > * gdb.base/unwindonsignal.c: New file. > * gdb.threads/interrupted-hand-call.exp: New file. > * gdb.threads/interrupted-hand-call.c: New file. > * gdb.threads/thread-unwindonsignal.exp: New file. I also meant to ask another question. What's the intended handling of unwindonsignal if the program stops in another thread? Should the inferior function call in the original thread be unwound? GDB's current behavior is busted as it pops the dummy frame on the wrong thread. This patch doesn't unwind the dummy frame (so at least it doesn't clobber the wrong thread), but I can change it to unwind the dummy frame of the original thread if you like.