From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108849 invoked by alias); 6 May 2016 10:32:45 -0000 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 Received: (qmail 108524 invoked by uid 89); 6 May 2016 10:32:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-pa0-f49.google.com Received: from mail-pa0-f49.google.com (HELO mail-pa0-f49.google.com) (209.85.220.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 06 May 2016 10:32:31 +0000 Received: by mail-pa0-f49.google.com with SMTP id bt5so46050153pac.3 for ; Fri, 06 May 2016 03:32:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=uJilVAZVAaoZr8LBGdO78zaZht9Ve8Nqgid31R5Y1kM=; b=c8HC6AaX/iWhGbsuOrwYmhr3rbB69l6Go4Sj2xxD3WT+HwsKGQuDrM5md18rsJgBnZ YGx+4QlVWS0hf9EoVp6v7aP0FqyKtsp60aWqg+AuMFjql+2wU5GWiwjVCF0LQhY2ZAtz fg1h6qgsB138OUA2LVfTY8xNe0YDq7FD6o7V25ywKlrXYqDf1pg2DTWI0C49E9Odt2PR 3RNmjd2bH8CtT9FxQi4q6oAiKCy6yv9+3i8xCMNMFf1FUU50LJmvKPiRXADCFFoZboBJ mD3G1d7MpCdhGLrg1YC1Gzs+lC8+DtDKstNoSSojX+e6fwBDPHxVLrbxsD3RZ30GB3Js I3pA== X-Gm-Message-State: AOPr4FVMxvPdif425+7jeCvQJFnsUMkKWTxzTDFw9PRFbITWNg10H6UAPFa6S6l4Ma5mLw== X-Received: by 10.66.152.237 with SMTP id vb13mr27395588pab.3.1462530750146; Fri, 06 May 2016 03:32:30 -0700 (PDT) Received: from E107787-LIN.cambridge.arm.com (gcc1-power7.osuosl.org. [140.211.15.137]) by smtp.gmail.com with ESMTPSA id qm10sm20041121pac.33.2016.05.06.03.32.28 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 06 May 2016 03:32:29 -0700 (PDT) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [RFC 1/3] make reinsert breakpoint thread specific Date: Fri, 06 May 2016 10:32:00 -0000 Message-Id: <1462530736-25117-2-git-send-email-yao.qi@linaro.org> In-Reply-To: <1462530736-25117-1-git-send-email-yao.qi@linaro.org> References: <1462530736-25117-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg00089.txt.bz2 gdb/gdbserver: 2016-05-06 Yao Qi * mem-break.c (struct breakpoint) : New field. (set_reinsert_breakpoint): New parameter thread. Callers updated. (delete_reinsert_breakpoints): Likewise. * mem-break.h (set_reinsert_breakpoint): Update declaration. (delete_reinsert_breakpoints): Likewise. --- gdb/gdbserver/linux-low.c | 4 ++-- gdb/gdbserver/mem-break.c | 11 ++++++++--- gdb/gdbserver/mem-break.h | 8 ++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 8e1e2fc..e539e34 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -4080,7 +4080,7 @@ install_software_single_step_breakpoints (struct lwp_info *lwp) next_pcs = (*the_low_target.get_next_pcs) (regcache); for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, pc); ++i) - set_reinsert_breakpoint (pc); + set_reinsert_breakpoint (pc, current_thread); do_cleanups (old_chain); } @@ -4705,7 +4705,7 @@ finish_step_over (struct lwp_info *lwp) because we were stepping over a breakpoint, and we hold all threads but LWP stopped while doing that. */ if (!can_hardware_single_step ()) - delete_reinsert_breakpoints (); + delete_reinsert_breakpoints (get_lwp_thread (lwp)); step_over_bkpt = null_ptid; return 1; diff --git a/gdb/gdbserver/mem-break.c b/gdb/gdbserver/mem-break.c index 363d7ca..197d7a1 100644 --- a/gdb/gdbserver/mem-break.c +++ b/gdb/gdbserver/mem-break.c @@ -190,6 +190,10 @@ struct breakpoint the breakpoint shall be deleted; 0 or if this callback is NULL, it will be left inserted. */ int (*handler) (CORE_ADDR); + + /* The owner of this breakpoint if it is not NULL. It is only used + by reinsert breakpoint so far. */ + struct thread_info *thread; }; /* Return the breakpoint size from its kind. */ @@ -1407,16 +1411,17 @@ gdb_breakpoint_here (CORE_ADDR where) } void -set_reinsert_breakpoint (CORE_ADDR stop_at) +set_reinsert_breakpoint (CORE_ADDR stop_at, struct thread_info *thread) { struct breakpoint *bp; bp = set_breakpoint_at (stop_at, NULL); bp->type = reinsert_breakpoint; + bp->thread = thread; } void -delete_reinsert_breakpoints (void) +delete_reinsert_breakpoints (struct thread_info *thread) { struct process_info *proc = current_process (); struct breakpoint *bp, **bp_link; @@ -1426,7 +1431,7 @@ delete_reinsert_breakpoints (void) while (bp) { - if (bp->type == reinsert_breakpoint) + if (bp->type == reinsert_breakpoint && bp->thread == thread) { *bp_link = bp->next; release_breakpoint (proc, bp); diff --git a/gdb/gdbserver/mem-break.h b/gdb/gdbserver/mem-break.h index 4d9a76c..2744584 100644 --- a/gdb/gdbserver/mem-break.h +++ b/gdb/gdbserver/mem-break.h @@ -150,13 +150,13 @@ struct breakpoint *set_breakpoint_at (CORE_ADDR where, int delete_breakpoint (struct breakpoint *bkpt); -/* Set a reinsert breakpoint at STOP_AT. */ +/* Set a reinsert breakpoint at STOP_AT for THREAD. */ -void set_reinsert_breakpoint (CORE_ADDR stop_at); +void set_reinsert_breakpoint (CORE_ADDR stop_at, struct thread_info *thread); -/* Delete all reinsert breakpoints. */ +/* Delete all reinsert breakpoints of THREAD. */ -void delete_reinsert_breakpoints (void); +void delete_reinsert_breakpoints (struct thread_info *thread); /* Reinsert breakpoints at WHERE (and change their status to inserted). */ -- 1.9.1