From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30520 invoked by alias); 28 Nov 2012 20:44:26 -0000 Received: (qmail 30510 invoked by uid 22791); 28 Nov 2012 20:44:25 -0000 X-SWARE-Spam-Status: No, hits=-7.8 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS,TW_EG X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 28 Nov 2012 20:44:17 +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 (8.14.4/8.14.4) with ESMTP id qASKiEEE030535 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 28 Nov 2012 15:44:14 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id qASKiB3F012600; Wed, 28 Nov 2012 15:44:12 -0500 Message-ID: <50B6779B.7010509@redhat.com> Date: Wed, 28 Nov 2012 20:44:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: markus.t.metzger@intel.com CC: gdb-patches@sourceware.org, markus.t.metzger@gmail.com, jan.kratochvil@redhat.com, tromey@redhat.com, kettenis@gnu.org Subject: Re: [patch v4 10/13] gdbserver, linux, btrace: add btrace support for linux-low References: <1354013351-14791-1-git-send-email-markus.t.metzger@intel.com> <1354013351-14791-11-git-send-email-markus.t.metzger@intel.com> In-Reply-To: <1354013351-14791-11-git-send-email-markus.t.metzger@intel.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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 X-SW-Source: 2012-11/txt/msg00829.txt.bz2 On 11/27/2012 10:49 AM, markus.t.metzger@intel.com wrote: > From: Markus Metzger > > Implement btrace target ops in target linux-low using the common linux-btrace > functions. > > Add linux-btrace.o to all targets that link linux-low.o. I'd rather not link it > to targets that do not support branch tracing, but this would require changing > the way target ops are defined for gdbserver. A simple way to do this would be to have configure.src set srv_linux_btrace=yes and then configure.ac would do: if test "${srv_linux_btrace}" = "yes"; then AC_DEFINE(HAVE_BTRACE, 1, [Define if the target supports branch tracing]) fi You'd then do e.g.,: @@ -5858,6 +5884,11 @@ static struct target_ops linux_target_ops = { linux_get_min_fast_tracepoint_insn_len, linux_qxfer_libraries_svr4, linux_supports_agent, + #if HAVE_BTRACE + linux_supports_btrace, + linux_enable_btrace, + linux_disable_btrace, + linux_btrace_has_changed, + linux_low_read_btrace, + #endif }; > > 2012-11-27 Markus Metzger > > gdbserver/ > * linux-low: Include linux-btrace.h. > (linux_low_enable_btrace): New function. > (linux_low_read_btrace): New function. > (linux_target_ops): Add btrace ops. > * configure.srv: Add linux-btrace.o. > > > --- > gdb/gdbserver/configure.srv | 34 +++++++++++++++++----------------- > gdb/gdbserver/linux-low.c | 31 +++++++++++++++++++++++++++++++ > 2 files changed, 48 insertions(+), 17 deletions(-) > > diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv > index d1e04a9..ae247b8 100644 > --- a/gdb/gdbserver/configure.srv > +++ b/gdb/gdbserver/configure.srv > @@ -47,7 +47,7 @@ case "${target}" in > srv_regobj="${srv_regobj} arm-with-vfpv3.o" > srv_regobj="${srv_regobj} arm-with-neon.o" > srv_tgtobj="linux-low.o linux-osdata.o linux-arm-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_xmlfiles="arm-with-iwmmxt.xml" > srv_xmlfiles="${srv_xmlfiles} arm-with-vfpv2.xml" > srv_xmlfiles="${srv_xmlfiles} arm-with-vfpv3.xml" > @@ -70,19 +70,19 @@ case "${target}" in > ;; > bfin-*-*linux*) srv_regobj=reg-bfin.o > srv_tgtobj="linux-low.o linux-osdata.o linux-bfin-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_thread_db=yes > ;; > crisv32-*-linux*) srv_regobj=reg-crisv32.o > srv_tgtobj="linux-low.o linux-osdata.o linux-crisv32-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_regsets=yes > srv_linux_thread_db=yes > ;; > cris-*-linux*) srv_regobj=reg-cris.o > srv_tgtobj="linux-low.o linux-osdata.o linux-cris-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_thread_db=yes > ;; > @@ -97,7 +97,7 @@ case "${target}" in > srv_xmlfiles="${srv_xmlfiles} $srv_amd64_linux_xmlfiles" > fi > srv_tgtobj="linux-low.o linux-osdata.o linux-x86-low.o i386-low.o i387-fp.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_regsets=yes > srv_linux_thread_db=yes > @@ -129,12 +129,12 @@ case "${target}" in > ;; > ia64-*-linux*) srv_regobj=reg-ia64.o > srv_tgtobj="linux-low.o linux-osdata.o linux-ia64-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > ;; > m32r*-*-linux*) srv_regobj=reg-m32r.o > srv_tgtobj="linux-low.o linux-osdata.o linux-m32r-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_thread_db=yes > ;; > @@ -144,7 +144,7 @@ case "${target}" in > srv_regobj=reg-m68k.o > fi > srv_tgtobj="linux-low.o linux-osdata.o linux-m68k-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_regsets=yes > srv_linux_thread_db=yes > @@ -155,7 +155,7 @@ case "${target}" in > srv_regobj=reg-m68k.o > fi > srv_tgtobj="linux-low.o linux-osdata.o linux-m68k-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_regsets=yes > srv_linux_thread_db=yes > @@ -165,7 +165,7 @@ case "${target}" in > srv_regobj="${srv_regobj} mips64-linux.o" > srv_regobj="${srv_regobj} mips64-dsp-linux.o" > srv_tgtobj="linux-low.o linux-osdata.o linux-mips-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_xmlfiles="mips-linux.xml" > srv_xmlfiles="${srv_xmlfiles} mips-dsp-linux.xml" > srv_xmlfiles="${srv_xmlfiles} mips-cpu.xml" > @@ -198,7 +198,7 @@ case "${target}" in > srv_regobj="${srv_regobj} powerpc-isa205-altivec64l.o" > srv_regobj="${srv_regobj} powerpc-isa205-vsx64l.o" > srv_tgtobj="linux-low.o linux-osdata.o linux-ppc-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_xmlfiles="rs6000/powerpc-32l.xml" > srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml" > srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-cell32l.xml" > @@ -241,7 +241,7 @@ case "${target}" in > srv_regobj="${srv_regobj} s390x-linux64v1.o" > srv_regobj="${srv_regobj} s390x-linux64v2.o" > srv_tgtobj="linux-low.o linux-osdata.o linux-s390-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_xmlfiles="s390-linux32.xml" > srv_xmlfiles="${srv_xmlfiles} s390-linux32v1.xml" > srv_xmlfiles="${srv_xmlfiles} s390-linux32v2.xml" > @@ -262,14 +262,14 @@ case "${target}" in > ;; > sh*-*-linux*) srv_regobj=reg-sh.o > srv_tgtobj="linux-low.o linux-osdata.o linux-sh-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_usrregs=yes > srv_linux_regsets=yes > srv_linux_thread_db=yes > ;; > sparc*-*-linux*) srv_regobj=reg-sparc64.o > srv_tgtobj="linux-low.o linux-osdata.o linux-sparc-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_regsets=yes > srv_linux_thread_db=yes > ;; > @@ -286,14 +286,14 @@ case "${target}" in > srv_xmlfiles="${srv_xmlfiles} tic6x-gp.xml" > srv_xmlfiles="${srv_xmlfiles} tic6x-c6xp.xml" > srv_tgtobj="linux-low.o linux-osdata.o linux-tic6x-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_regsets=yes > srv_linux_usrregs=yes > srv_linux_thread_db=yes > ;; > x86_64-*-linux*) srv_regobj="$srv_amd64_linux_regobj $srv_i386_linux_regobj" > srv_tgtobj="linux-low.o linux-osdata.o linux-x86-low.o i386-low.o i387-fp.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_xmlfiles="$srv_i386_linux_xmlfiles $srv_amd64_linux_xmlfiles" > srv_linux_usrregs=yes # This is for i386 progs. > srv_linux_regsets=yes > @@ -308,7 +308,7 @@ case "${target}" in > > xtensa*-*-linux*) srv_regobj=reg-xtensa.o > srv_tgtobj="linux-low.o linux-osdata.o linux-xtensa-low.o linux-procfs.o" > - srv_tgtobj="${srv_tgtobj} linux-ptrace.o" > + srv_tgtobj="${srv_tgtobj} linux-ptrace.o linux-btrace.o" > srv_linux_regsets=yes > ;; > tilegx-*-linux*) srv_regobj=reg-tilegx.o > diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c > index c697f6b..ffaa96f 100644 > --- a/gdb/gdbserver/linux-low.c > +++ b/gdb/gdbserver/linux-low.c > @@ -20,6 +20,7 @@ > #include "linux-low.h" > #include "linux-osdata.h" > #include "agent.h" > +#include "linux-btrace.h" > > #include "gdb_wait.h" > #include > @@ -5794,6 +5795,31 @@ linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf, > return len; > } > > +/* Read branch trace data for @tinfo as btrace xml document into @buffer. */ > +static void > +linux_low_read_btrace (struct btrace_target_info *tinfo, struct buffer *buffer) > +{ > + VEC (btrace_block_s) *btrace; > + struct btrace_block *block; > + int i; > + > + if (!tinfo->ptr_bits) > + tinfo->ptr_bits = register_size (0) * 8; Same comment as in the gdb patch. > + > + btrace = linux_read_btrace (tinfo); > + > + buffer_grow_str (buffer, "\n"); > + buffer_grow_str (buffer, "\n"); > + > + for (i = 0; VEC_iterate (btrace_block_s, btrace, i, block); i++) > + buffer_xml_printf (buffer, "\n", > + paddress (block->begin), paddress (block->end)); > + > + buffer_grow_str (buffer, "\n"); > + > + VEC_free (btrace_block_s, btrace); > +} > + > static struct target_ops linux_target_ops = { > linux_create_inferior, > linux_attach, > @@ -5858,6 +5884,11 @@ static struct target_ops linux_target_ops = { > linux_get_min_fast_tracepoint_insn_len, > linux_qxfer_libraries_svr4, > linux_supports_agent, > + linux_supports_btrace, > + linux_enable_btrace, > + linux_disable_btrace, > + linux_btrace_has_changed, > + linux_low_read_btrace, > }; > > static void > -- Pedro Alves