From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5469 invoked by alias); 25 Jan 2016 11:54:01 -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 5450 invoked by uid 89); 25 Jan 2016 11:54:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=HContent-Transfer-Encoding:8bit X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 25 Jan 2016 11:53:58 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id CCA69C0AC91B; Mon, 25 Jan 2016 11:53:57 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u0PBrtmV006746; Mon, 25 Jan 2016 06:53:56 -0500 Message-ID: <56A60CD3.6060704@redhat.com> Date: Mon, 25 Jan 2016 11:54:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: =?UTF-8?B?TWFyY2luIEtvxZtjaWVsbmlja2k=?= , gdb-patches@sourceware.org Subject: Re: [PATCH] gdb.trace: Remove struct tracepoint_action_ops. References: <1453577516-19252-1-git-send-email-koriakin@0x04.net> In-Reply-To: <1453577516-19252-1-git-send-email-koriakin@0x04.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-SW-Source: 2016-01/txt/msg00614.txt.bz2 On 01/23/2016 07:31 PM, Marcin Kościelnicki wrote: > The struct tracepoint_action has an ops field, pointing to > a tracepoint_action_ops structure, containing send and download ops. > However, this field is only present when compiled in gdbserver, and not > when compiled in IPA. When gdbserver is downloading tracepoint actions > to IPA, it skips offsetof(struct tracepoint_action, type) bytes from > its struct tracepoint_action, to get to the part that corresponds to > IPA's struct tracepoint_action. > > Unfortunately, this fails badly on ILP32 platforms where alignof(long long) > == 8. Consider struct collect_memory_action layout in gdbserver: > > 0-3: base.ops > 4: base.type > 8-15: addr > 16-23: len > 24-27: basereg > sizeof == 32 > > and its layout in IPA: > > 0: base.type > 8-15: addr > 16-23: len > 24-27: basereg > sizeof == 32 > > When gdbserver tries to download it to IPA, it skips the first 4 bytes > (base.ops), figuring the rest will match what IPA expects - which is > not true, since addr is aligned to 8 bytes and will be at a different > relative position to base.type. > > The problem went unnoticed on the currently supported platforms, since > aarch64 and x86_64 have ops aligned to 8 bytes, and i386 has only 4-byte > alignment for long long. > > There are a few possible ways around this problem. I decided on removing > ops altogether, since they can be easily inlined in their (only) places > of use - in fact allowing us share the code between 'L' and 'R'. Any > approach where struct tracepoint_action is different between IPA and > gdbserver is just asking for trouble. > > Found on s390. Tested on x86_64, s390, s390x. Hmm, this is essentially the same as: https://sourceware.org/ml/gdb-patches/2015-03/msg00995.html Right? Seems that other patch inlines things a bit less though, which offhand looks preferable. WDYT? Not sure what happened to that series. I thought most of it (if not all) had been approved already. Thanks, Pedro Alves