From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12378 invoked by alias); 14 Jan 2014 08:04:49 -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 12153 invoked by uid 89); 14 Jan 2014 08:04:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mga03.intel.com Received: from mga03.intel.com (HELO mga03.intel.com) (143.182.124.21) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 14 Jan 2014 08:04:47 +0000 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by azsmga101.ch.intel.com with ESMTP; 14 Jan 2014 00:04:45 -0800 X-ExtLoop1: 1 Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga001.fm.intel.com with ESMTP; 14 Jan 2014 00:04:42 -0800 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id s0E84fYh013331; Tue, 14 Jan 2014 08:04:41 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id s0E84fOv009464; Tue, 14 Jan 2014 09:04:41 +0100 Received: (from mmetzger@localhost) by ulvlx001.iul.intel.com with œ id s0E84fDN009460; Tue, 14 Jan 2014 09:04:41 +0100 From: Markus Metzger To: jan.kratochvil@redhat.com, palves@redhat.com Cc: gdb-patches@sourceware.org Subject: [PATCH v10 22/28] record-btrace: provide target_find_new_threads method Date: Tue, 14 Jan 2014 08:05:00 -0000 Message-Id: <1389686678-9039-23-git-send-email-markus.t.metzger@intel.com> In-Reply-To: <1389686678-9039-1-git-send-email-markus.t.metzger@intel.com> References: <1389686678-9039-1-git-send-email-markus.t.metzger@intel.com> X-IsSubscribed: yes X-SW-Source: 2014-01/txt/msg00406.txt.bz2 The "info threads" command tries to read memory, which is not possible during replay. This results in an error message and aborts the command without showing the existing threads. Provide a to_find_new_threads target method to skip the search while replaying. 2014-01-14 Markus Metzger * record-btrace.c (record_btrace_find_new_threads) (record_btrace_thread_alive): New. (init_record_btrace_ops): Initialize to_find_new_threads and to_thread_alive. --- gdb/record-btrace.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c index 7701fc4..ba89bf4 100644 --- a/gdb/record-btrace.c +++ b/gdb/record-btrace.c @@ -1051,6 +1051,41 @@ record_btrace_wait (struct target_ops *ops, ptid_t ptid, error (_("You can't do this from here. Do 'record goto end', first.")); } +/* The to_find_new_threads method of target record-btrace. */ + +static void +record_btrace_find_new_threads (struct target_ops *ops) +{ + /* Don't expect new threads if we're replaying. */ + if (record_btrace_is_replaying ()) + return; + + /* Forward the request. */ + for (ops = ops->beneath; ops != NULL; ops = ops->beneath) + if (ops->to_find_new_threads != NULL) + { + ops->to_find_new_threads (ops); + break; + } +} + +/* The to_thread_alive method of target record-btrace. */ + +static int +record_btrace_thread_alive (struct target_ops *ops, ptid_t ptid) +{ + /* We don't add or remove threads during replay. */ + if (record_btrace_is_replaying ()) + return find_thread_ptid (ptid) != NULL; + + /* Forward the request. */ + for (ops = ops->beneath; ops != NULL; ops = ops->beneath) + if (ops->to_thread_alive != NULL) + return ops->to_thread_alive (ops, ptid); + + return 0; +} + /* Initialize the record-btrace target ops. */ static void @@ -1087,6 +1122,8 @@ init_record_btrace_ops (void) ops->to_get_unwinder = &record_btrace_frame_unwind; ops->to_resume = record_btrace_resume; ops->to_wait = record_btrace_wait; + ops->to_find_new_threads = record_btrace_find_new_threads; + ops->to_thread_alive = record_btrace_thread_alive; ops->to_stratum = record_stratum; ops->to_magic = OPS_MAGIC; } -- 1.8.3.1