From patchwork Tue Apr 25 01:11:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 20128 Received: (qmail 34309 invoked by alias); 25 Apr 2017 01:11:11 -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 34299 invoked by uid 89); 25 Apr 2017 01:11:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f41.google.com Received: from mail-wm0-f41.google.com (HELO mail-wm0-f41.google.com) (74.125.82.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 25 Apr 2017 01:11:09 +0000 Received: by mail-wm0-f41.google.com with SMTP id m123so82554313wma.0 for ; Mon, 24 Apr 2017 18:11:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=Wj0Sws2872/IZsX74hvMmQ9QaawJ0S/7KzlcHsszfeA=; b=iOaccHy9/hk/mc53QseyjodIf0rYLnf23eWz5uyusEGHoMuViO27YVx3c8+q0kCU9p PU9CBEBWxafVhi7ztMnMzO8neme+LqUpJrncBIyg00ZBbVkGiUT6T2CZzwIkhlTGGyCu /0e1h0XvF3aqeEu4bX9dDcuoid/B9MJQWJFEszWBQhjUV5wr2rkMXpUIMBjSeRkVZue/ 8Vq4FFe/dzMWAaMDkwnM8siJFcLLL3gR6p6Q6xJGco1GkKHjezFIIdAS4cRExlCn709D 3M83k3tj76Yxjc+U6rrGCa6tLwggcQfROGfKn0BNVSHMdG+oyaSq+HY0r7x3PUxUWJgg 8vrg== X-Gm-Message-State: AN3rC/61c/4WW3voPKxskA/bwD9Ls40nfG4SfIZ92IT3cJXUOod1z4Bo h+IzKH+Tu/oPLnXI X-Received: by 10.28.155.203 with SMTP id d194mr10879888wme.73.1493082669020; Mon, 24 Apr 2017 18:11:09 -0700 (PDT) Received: from [192.168.0.102] ([37.189.166.198]) by smtp.gmail.com with ESMTPSA id t85sm2224083wmt.23.2017.04.24.18.11.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 24 Apr 2017 18:11:08 -0700 (PDT) Subject: Re: [PATCH 4/5] Don't memset non-POD types: struct btrace_insn To: "Metzger, Markus T" , "gdb-patches@sourceware.org" References: <1492050475-9238-1-git-send-email-palves@redhat.com> <1492050475-9238-5-git-send-email-palves@redhat.com> From: Pedro Alves Message-ID: Date: Tue, 25 Apr 2017 02:11:07 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: On 04/13/2017 08:53 AM, Metzger, Markus T wrote: >> -----Original Message----- >> From: gdb-patches-owner@sourceware.org [mailto:gdb-patches- >> owner@sourceware.org] On Behalf Of Pedro Alves >> Sent: Thursday, April 13, 2017 4:28 AM >> To: gdb-patches@sourceware.org >> Subject: [PATCH 4/5] Don't memset non-POD types: struct btrace_insn > > Hello Pedro, Hi! > >> +/* Return the btrace instruction for INSN. */ >> + >> +static btrace_insn >> +pt_btrace_insn (const struct pt_insn &insn) >> +{ >> + return {(CORE_ADDR) insn.ip, (gdb_byte) insn.size, >> + pt_reclassify_insn (insn.iclass), >> + pt_btrace_insn_flags (&insn)}; >> +} > > This is the only user of pt_btrace_insn_flags. If you want, you may > change it to take a const & instead of a const *. > > The patch looks good to me. Thanks Markus. Here's what I pushed now, then. From b5c3668253b909fd1f5b011893a35bb8dfd3be9b Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 25 Apr 2017 01:27:42 +0100 Subject: [PATCH] Don't memset non-POD types: struct btrace_insn struct btrace_insn is not a POD [1] so we shouldn't be using memset to initialize it [2]. Use list-initialization instead, wrapped in a "pt insn to btrace insn" function, which looks like just begging to be added next to the existing pt_reclassify_insn/pt_btrace_insn_flags functions. [1] - because its field "flags" is not POD, because enum_flags has a non-trivial default ctor. gdb/ChangeLog: 2017-04-25 Pedro Alves * btrace.c (pt_btrace_insn_flags): Change parameter type to reference. (pt_btrace_insn): New function. (ftrace_add_pt): Remove memset call and use pt_btrace_insn. --- gdb/ChangeLog | 7 +++++++ gdb/btrace.c | 23 ++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5df4a96..1b983b9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2017-04-25 Pedro Alves + * btrace.c (pt_btrace_insn_flags): Change parameter type to + reference. + (pt_btrace_insn): New function. + (ftrace_add_pt): Remove memset call and use pt_btrace_insn. + +2017-04-25 Pedro Alves + * ada-lang.c (ada_catchpoint_location): Now a "class". Remove "base" field and inherit from "bp_location" instead. Add non-default ctor. diff --git a/gdb/btrace.c b/gdb/btrace.c index 95dc7ab..238df0a 100644 --- a/gdb/btrace.c +++ b/gdb/btrace.c @@ -1112,16 +1112,27 @@ pt_reclassify_insn (enum pt_insn_class iclass) /* Return the btrace instruction flags for INSN. */ static btrace_insn_flags -pt_btrace_insn_flags (const struct pt_insn *insn) +pt_btrace_insn_flags (const struct pt_insn &insn) { btrace_insn_flags flags = 0; - if (insn->speculative) + if (insn.speculative) flags |= BTRACE_INSN_FLAG_SPECULATIVE; return flags; } +/* Return the btrace instruction for INSN. */ + +static btrace_insn +pt_btrace_insn (const struct pt_insn &insn) +{ + return {(CORE_ADDR) insn.ip, (gdb_byte) insn.size, + pt_reclassify_insn (insn.iclass), + pt_btrace_insn_flags (insn)}; +} + + /* Add function branch trace using DECODER. */ static void @@ -1138,7 +1149,6 @@ ftrace_add_pt (struct pt_insn_decoder *decoder, end = *pend; for (;;) { - struct btrace_insn btinsn; struct pt_insn insn; errcode = pt_insn_sync_forward (decoder); @@ -1150,7 +1160,6 @@ ftrace_add_pt (struct pt_insn_decoder *decoder, break; } - memset (&btinsn, 0, sizeof (btinsn)); for (;;) { errcode = pt_insn_next (decoder, &insn, sizeof(insn)); @@ -1207,11 +1216,7 @@ ftrace_add_pt (struct pt_insn_decoder *decoder, /* Maintain the function level offset. */ *plevel = std::min (*plevel, end->level); - btinsn.pc = (CORE_ADDR) insn.ip; - btinsn.size = (gdb_byte) insn.size; - btinsn.iclass = pt_reclassify_insn (insn.iclass); - btinsn.flags = pt_btrace_insn_flags (&insn); - + btrace_insn btinsn = pt_btrace_insn (insn); ftrace_update_insns (end, &btinsn); }