From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26112 invoked by alias); 24 Mar 2010 00:05:48 -0000 Received: (qmail 26094 invoked by uid 22791); 24 Mar 2010 00:05:47 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 24 Mar 2010 00:05:43 +0000 Received: (qmail 18232 invoked from network); 24 Mar 2010 00:05:41 -0000 Received: from unknown (HELO orlando.localnet) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 24 Mar 2010 00:05:41 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: Teach gdbserver to step over internal breakpoints Date: Wed, 24 Mar 2010 00:05:00 -0000 User-Agent: KMail/1.12.2 (Linux/2.6.31-20-generic; KDE/4.3.2; x86_64; ; ) References: <201003161839.52618.pedro@codesourcery.com> In-Reply-To: <201003161839.52618.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201003240005.38983.pedro@codesourcery.com> 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-03/txt/msg00806.txt.bz2 On Tuesday 16 March 2010 18:39:52, Pedro Alves wrote: > This tests cleanly on x86_64-linux, native gdbserver, with > a small hack to force it to use the thread event breakpoint. > I'll confirm this doesn't break software-single-step archs > before commiting, although I don't expect to, since I had > tested an earlier version of this patch on ARM. I've now tested this on arm-none-linux-gnueabi, and there were no regressions. I've also re-tested this on x86_64-linux. It's now checked in. > 2010-03-16 Pedro Alves > > gdb/gdbserver/ > * linux-low.c (can_hardware_single_step): New. > (supports_breakpoints): New. > (handle_extended_wait): If stopping threads, read the stop pc of > the new cloned LWP. > (get_pc): New. > (get_stop_pc): Add `lwp' parameter. Handle it. Bail out if the > low target doesn't support retrieving the PC. > (add_lwp): Set last_resume_kind to resume_continue. > (linux_attach_lwp_1): Adjust comments. Always set stop_expected. > (linux_attach): Don't clear stop_expected. Set the lwp's > last_resume_kind to resume_stop. > (linux_detach_one_lwp): Don't check for removed breakpoints. > (check_removed_breakpoint): Delete. > (status_pending_p): Rename to ... > (status_pending_p_callback): ... this. Don't check for removed > breakpoints. Don't consider threads that are stopped from GDB's > perspective. > (linux_wait_for_lwp): Always read the stop_pc here. > (cancel_breakpoint): New. > (step_over_bkpt): New global. > (linux_wait_for_event_1): Implement stepping over breakpoints. > (gdb_wants_lwp_stopped): New. > (gdb_wants_all_stopped): New. > (linux_wait_1): Tag threads as gdb-wants-stopped. Cancel finished > single-step traps here. Store the thread's last reported target > wait status. > (send_sigstop): Don't clear stop_expected. Always set it, > instead. > (mark_lwp_dead): Remove reference to pending_is_breakpoint. > (cancel_finished_single_step): New. > (cancel_finished_single_steps): New. > (wait_for_sigstop): Don't cancel finished single-step traps here. > (linux_resume_one_lwp): Don't check for removed breakpoints. > Don't set `step' on non-hardware step archs. > (linux_set_resume_request): Ignore resume_stop requests if already > stopping or stopped. Set the lwp's last_resume_kind. > (resume_status_pending_p): Don't check for removed breakpoints. > (need_step_over_p): New. > (start_step_over): New. > (finish_step_over): New. > (linux_resume_one_thread): Always queue a sigstop for resume_stop > requests. Clear the thread's last reported target waitstatus. > Don't use the `suspended' flag. Don't consider pending breakpoints. > (linux_resume): Start a step-over if necessary. > (proceed_one_lwp): New. > (proceed_all_lwps): New. > (unstop_all_lwps): New. > * linux-low.h (struct lwp_info): Rewrite comment for the > `suspended' flag. Add the `stop_pc' field. Delete the > `pending_stop_pc' field. Tweak the `stepping' flag's comment. > Add `'last_resume_kind' and `need_step_over' fields. > * inferiors.c (struct thread_info): Delete, moved elsewhere. > * mem-break.c (struct breakpoint): Delete `reinserting' flag. > Delete `breakpoint_to_reinsert' field. New flag `inserted'. > (set_raw_breakpoint_at): New. > (set_breakpoint_at): Rewrite to use it. > (reinsert_breakpoint_handler): Delete. > (set_reinsert_breakpoint): New. > (reinsert_breakpoint_by_bp): Delete. > (delete_reinsert_breakpoints): New. > (uninsert_breakpoint): Rewrite. > (uninsert_breakpoints_at): New. > (reinsert_breakpoint): Rewrite. > (reinsert_breakpoints_at): New. > (check_breakpoints): Rewrite. > (breakpoint_here): New. > (breakpoint_inserted_here): New. > (check_mem_read): Adjust. > * mem-break.h (breakpoints_supported, breakpoint_here) > (breakpoint_inserted_here, set_reinsert_breakpoint): Declare. > (reinsert_breakpoint_by_bp): Delete declaration. > (delete_reinsert_breakpoints): Declare. > (reinsert_breakpoint): Delete declaration. > (reinsert_breakpoints_at): Declare. > (uninsert_breakpoint): Delete declaration. > (uninsert_breakpoints_at): Declare. > (check_breakpoints): Adjust prototype. > * server.h: Adjust include order. > (struct thread_info): Declare here. Add a `last_status' field. -- Pedro Alves