From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aN4UIu6Y718DTQAAWB0awg (envelope-from ) for ; Fri, 01 Jan 2021 16:49:34 -0500 Received: by simark.ca (Postfix, from userid 112) id 82B971F0C2; Fri, 1 Jan 2021 16:49:34 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=DKIM_SIGNED,MAILING_LIST_MULTI, RCVD_IN_BL_SPAMCOP_NET,T_DKIM_INVALID,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id DCE2A1F0B8 for ; Fri, 1 Jan 2021 16:49:32 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E3ECF3938C21; Fri, 1 Jan 2021 21:48:58 +0000 (GMT) Received: from gateway22.websitewelcome.com (gateway22.websitewelcome.com [192.185.46.187]) by sourceware.org (Postfix) with ESMTPS id E336B3938C21 for ; Fri, 1 Jan 2021 21:48:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E336B3938C21 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=tom@tromey.com Received: from cm16.websitewelcome.com (cm16.websitewelcome.com [100.42.49.19]) by gateway22.websitewelcome.com (Postfix) with ESMTP id 8B2D85F2B for ; Fri, 1 Jan 2021 15:48:53 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id vSI1kXBEGHPnUvSI1kgzx8; Fri, 01 Jan 2021 15:48:53 -0600 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Sender:Reply-To:Cc:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=LjpUXUqYVnJVLCmmqRVKgiP1FRJFm6pk6XWQr5S+yYg=; b=tmcZH2BATr+gaYnomcvkVgh5tj igpv+LnTJrpwE2+nKihgqhgiP5MyBfDcA67Nm5glmcqIx105FzN7Qb2aAe8/LXbXR8ALhjuLkZ8Sb ycEAi8ZjGbRucsyIPVt1ml16J; Received: from 97-122-81-39.hlrn.qwest.net ([97.122.81.39]:60424 helo=localhost.localdomain) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1kvSI1-0029vv-B8 for gdb-patches@sourceware.org; Fri, 01 Jan 2021 14:48:53 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Subject: [PATCH 175/203] Convert dtrace probes to use operations Date: Fri, 1 Jan 2021 14:46:55 -0700 Message-Id: <20210101214723.1784144-176-tom@tromey.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210101214723.1784144-1-tom@tromey.com> References: <20210101214723.1784144-1-tom@tromey.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.122.81.39 X-Source-L: No X-Exim-ID: 1kvSI1-0029vv-B8 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-122-81-39.hlrn.qwest.net (localhost.localdomain) [97.122.81.39]:60424 X-Source-Auth: tom+tromey.com X-Email-Count: 176 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" This changes dtrace to use the new operation type. gdb/ChangeLog 2021-01-01 Tom Tromey * gdbarch.sh (dtrace_parse_probe_argument): Change return type. * gdbarch.h: Rebuild. * gdbarch.c: Rebuild. * dtrace-probe.c (dtrace_probe::build_arg_exprs): Update. * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Change return type. (amd64_dtrace_parse_probe_argument): Update. --- gdb/ChangeLog | 10 ++++++++++ gdb/amd64-linux-tdep.c | 39 ++++++++++++++------------------------- gdb/dtrace-probe.c | 13 ++++++------- gdb/gdbarch.c | 6 +++--- gdb/gdbarch.h | 4 ++-- gdb/gdbarch.sh | 2 +- 6 files changed, 36 insertions(+), 38 deletions(-) diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c index f65ac4e4357..709c839cefa 100644 --- a/gdb/amd64-linux-tdep.c +++ b/gdb/amd64-linux-tdep.c @@ -41,6 +41,7 @@ #include "glibc-tdep.h" #include "arch/amd64.h" #include "target-descriptions.h" +#include "expop.h" /* The syscall's XML filename for i386. */ #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml" @@ -1733,17 +1734,16 @@ amd64_dtrace_disable_probe (struct gdbarch *gdbarch, CORE_ADDR addr) /* Implementation of `gdbarch_dtrace_parse_probe_argument', as defined in gdbarch.h. */ -static void +static expr::operation_up amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch, - struct expr_builder *builder, int narg) { - struct stoken str; - /* DTrace probe arguments can be found on the ABI-defined places for regular arguments at the current PC. The probe abstraction currently supports up to 12 arguments for probes. */ + using namespace expr; + if (narg < 6) { static const int arg_reg_map[6] = @@ -1757,12 +1757,7 @@ amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch, }; int regno = arg_reg_map[narg]; const char *regname = user_reg_map_regnum_to_name (gdbarch, regno); - - write_exp_elt_opcode (builder, OP_REGISTER); - str.ptr = regname; - str.length = strlen (regname); - write_exp_string (builder, str); - write_exp_elt_opcode (builder, OP_REGISTER); + return make_operation (regname); } else { @@ -1770,27 +1765,21 @@ amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch, const char *regname = user_reg_map_regnum_to_name (gdbarch, AMD64_RSP_REGNUM); /* Displacement. */ - write_exp_elt_opcode (builder, OP_LONG); - write_exp_elt_type (builder, builtin_type (gdbarch)->builtin_long); - write_exp_elt_longcst (builder, narg - 6); - write_exp_elt_opcode (builder, OP_LONG); + struct type *long_type = builtin_type (gdbarch)->builtin_long; + operation_up disp = make_operation (long_type, + narg - 6); /* Register: SP. */ - write_exp_elt_opcode (builder, OP_REGISTER); - str.ptr = regname; - str.length = strlen (regname); - write_exp_string (builder, str); - write_exp_elt_opcode (builder, OP_REGISTER); + operation_up reg = make_operation (regname); - write_exp_elt_opcode (builder, BINOP_ADD); + operation_up add = make_operation (std::move (disp), + std::move (reg)); /* Cast to long. */ - write_exp_elt_opcode (builder, UNOP_CAST); - write_exp_elt_type (builder, - lookup_pointer_type (builtin_type (gdbarch)->builtin_long)); - write_exp_elt_opcode (builder, UNOP_CAST); + operation_up cast = make_operation (std::move (add), + long_type); - write_exp_elt_opcode (builder, UNOP_IND); + return make_operation (std::move (cast)); } } diff --git a/gdb/dtrace-probe.c b/gdb/dtrace-probe.c index f4b6becbf61..3fa02ddaebe 100644 --- a/gdb/dtrace-probe.c +++ b/gdb/dtrace-probe.c @@ -32,6 +32,7 @@ #include "language.h" #include "parser-defs.h" #include "inferior.h" +#include "expop.h" /* The type of the ELF sections where we will find the DOF programs with information about probes. */ @@ -629,20 +630,18 @@ dtrace_probe::build_arg_exprs (struct gdbarch *gdbarch) /* The argument value, which is ABI dependent and casted to `long int'. */ - gdbarch_dtrace_parse_probe_argument (gdbarch, &builder, argc); + expr::operation_up op = gdbarch_dtrace_parse_probe_argument (gdbarch, + argc); /* Casting to the expected type, but only if the type was recognized at probe load time. Otherwise the argument will be evaluated as the long integer passed to the probe. */ if (arg.type != NULL) - { - write_exp_elt_opcode (&builder, UNOP_CAST); - write_exp_elt_type (&builder, arg.type); - write_exp_elt_opcode (&builder, UNOP_CAST); - } + op = expr::make_operation (std::move (op), + arg.type); + builder.set_operation (std::move (op)); arg.expr = builder.release (); - prefixify_expression (arg.expr.get ()); ++argc; } } diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 4bdf4068504..af95aa01cbd 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -4637,14 +4637,14 @@ gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch) return gdbarch->dtrace_parse_probe_argument != NULL; } -void -gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct expr_builder *builder, int narg) +expr::operation_up +gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, int narg) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->dtrace_parse_probe_argument != NULL); if (gdbarch_debug >= 2) fprintf_unfiltered (gdb_stdlog, "gdbarch_dtrace_parse_probe_argument called\n"); - gdbarch->dtrace_parse_probe_argument (gdbarch, builder, narg); + return gdbarch->dtrace_parse_probe_argument (gdbarch, narg); } void diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 2fef567c06f..3b9d8da4f61 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -1386,8 +1386,8 @@ extern void set_gdbarch_stap_adjust_register (struct gdbarch *gdbarch, gdbarch_s extern bool gdbarch_dtrace_parse_probe_argument_p (struct gdbarch *gdbarch); -typedef void (gdbarch_dtrace_parse_probe_argument_ftype) (struct gdbarch *gdbarch, struct expr_builder *builder, int narg); -extern void gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, struct expr_builder *builder, int narg); +typedef expr::operation_up (gdbarch_dtrace_parse_probe_argument_ftype) (struct gdbarch *gdbarch, int narg); +extern expr::operation_up gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, int narg); extern void set_gdbarch_dtrace_parse_probe_argument (struct gdbarch *gdbarch, gdbarch_dtrace_parse_probe_argument_ftype *dtrace_parse_probe_argument); /* True if the given ADDR does not contain the instruction sequence diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index e7c96159241..d68d3b7a425 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -1025,7 +1025,7 @@ M;std::string;stap_adjust_register;struct stap_parse_info *p, const std::string # The expression to compute the NARTGth+1 argument to a DTrace USDT probe. # NARG must be >= 0. -M;void;dtrace_parse_probe_argument;struct expr_builder *builder, int narg;builder, narg +M;expr::operation_up;dtrace_parse_probe_argument;int narg;narg # True if the given ADDR does not contain the instruction sequence # corresponding to a disabled DTrace is-enabled probe. -- 2.26.2