From patchwork Thu Jan 7 17:44:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Tremblay X-Patchwork-Id: 10271 Received: (qmail 27782 invoked by alias); 7 Jan 2016 17:45:14 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 27653 invoked by uid 89); 7 Jan 2016 17:45:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 spammy=elts, cell, Cell X-HELO: usplmg20.ericsson.net Received: from usplmg20.ericsson.net (HELO usplmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Thu, 07 Jan 2016 17:45:11 +0000 Received: from EUSAAHC008.ericsson.se (Unknown_Domain [147.117.188.96]) by usplmg20.ericsson.net (Symantec Mail Security) with SMTP id DD.C4.06940.542AE865; Thu, 7 Jan 2016 18:37:09 +0100 (CET) Received: from elxa4wqvvz1.dyn.mo.ca.am.ericsson.se (147.117.188.8) by smtps-am.internal.ericsson.com (147.117.188.96) with Microsoft SMTP Server (TLS) id 14.3.248.2; Thu, 7 Jan 2016 12:45:04 -0500 From: Antoine Tremblay To: CC: Antoine Tremblay Subject: [PATCH 2/4] Use the target architecture when encoding tracepoint actions Date: Thu, 7 Jan 2016 12:44:55 -0500 Message-ID: <1452188697-23870-3-git-send-email-antoine.tremblay@ericsson.com> In-Reply-To: <1452188697-23870-1-git-send-email-antoine.tremblay@ericsson.com> References: <1452188697-23870-1-git-send-email-antoine.tremblay@ericsson.com> MIME-Version: 1.0 X-IsSubscribed: yes This patch uses the target architecture rather then the objfile architecture when encoding tracepoint actions. The target architecture may contain additional registers. E.g. ARM VFP registers. This information is needed to allow their collection. Since we can never know whether the registers numbers in the target match the binary's we have to use tdesc here. One note about combined debuggers / multi-inferior from Pedro Alves: In the combined debugger case taking Cell as the practical example that gdb supports currently: In that case, the main target_gdbarch() will be powerpc, but you may have set a tracepoint on _spu_ code, which has a different gdbarch. so for that case, target_gdbarch would be wrong. I think that in that case, we'd need to find __the_ target/tdesc gdbarch that is (bfd) compatible with the objfile's gdbarch. I think cell/spu gdbserver doesn't support tracepoints, so we can ignore this for now. The multi-inferior/process case is somewhat related, but its simpler. each inferior has its own gdbarch. That is, target_gdbarch depends on the current inferior selected. In fact, that just returns inferior->gdbarch nowaways. No regressions, tested on ubuntu 14.04 ARMv7 and x86. With gdbserver-{native,extended} / { -marm -mthumb } gdb/ChangeLog: * tracepoint.c (encode_actions_1): Use target_gdbarch () rather than loc->gdbarch. --- gdb/tracepoint.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 55b2e8e..f7f5736 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -1428,14 +1428,14 @@ encode_actions_1 (struct command_line *action, if (0 == strncasecmp ("$reg", action_exp, 4)) { - for (i = 0; i < gdbarch_num_regs (tloc->gdbarch); i++) + for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++) add_register (collect, i); action_exp = strchr (action_exp, ','); /* more? */ } else if (0 == strncasecmp ("$arg", action_exp, 4)) { add_local_symbols (collect, - tloc->gdbarch, + target_gdbarch (), tloc->address, frame_reg, frame_offset, @@ -1446,7 +1446,7 @@ encode_actions_1 (struct command_line *action, else if (0 == strncasecmp ("$loc", action_exp, 4)) { add_local_symbols (collect, - tloc->gdbarch, + target_gdbarch (), tloc->address, frame_reg, frame_offset, @@ -1459,7 +1459,7 @@ encode_actions_1 (struct command_line *action, struct cleanup *old_chain1 = NULL; aexpr = gen_trace_for_return_address (tloc->address, - tloc->gdbarch, + target_gdbarch (), trace_string); old_chain1 = make_cleanup_free_agent_expr (aexpr); @@ -1513,7 +1513,7 @@ encode_actions_1 (struct command_line *action, { const char *name = &exp->elts[2].string; - i = user_reg_map_name_to_regnum (tloc->gdbarch, + i = user_reg_map_name_to_regnum (target_gdbarch (), name, strlen (name)); if (i == -1) internal_error (__FILE__, __LINE__, @@ -1543,7 +1543,7 @@ encode_actions_1 (struct command_line *action, collect_symbol (collect, exp->elts[2].symbol, - tloc->gdbarch, + target_gdbarch (), frame_reg, frame_offset, tloc->address,