From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20176 invoked by alias); 15 Nov 2016 23:10:48 -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 20153 invoked by uid 89); 15 Nov 2016 23:10:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.7 required=5.0 tests=BAYES_00,KAM_STOCKGEN,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=m1 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 ESMTP; Tue, 15 Nov 2016 23:10:43 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7037619D05F for ; Tue, 15 Nov 2016 23:10:42 +0000 (UTC) Received: from cascais.lan (ovpn03.gateway.prod.ext.phx2.redhat.com [10.5.9.3]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uAFNAfpi004770 for ; Tue, 15 Nov 2016 18:10:41 -0500 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH] gdb/tracepoint.c: Don't use printf_vma Date: Tue, 15 Nov 2016 23:10:00 -0000 Message-Id: <1479251441-16443-1-git-send-email-palves@redhat.com> X-SW-Source: 2016-11/txt/msg00407.txt.bz2 I noticed that bfd's printf_vma prints to stdout directly: bfd-in2.h:202:#define printf_vma(x) fprintf_vma(stdout,x) This is a bad idea in gdb, where we should use gdb_stdout/gdb_stderr/gdb_stdlog, etc., to support redirection. Eliminate uses of sprintf_vma too while at it. Tested on Fedora 23, w/ gdbserver. gdb/ChangeLog: yyyy-mm-dd Pedro Alves * tracepoint.c (collection_list::add_memrange): Add gdbarch parameter. Use paddress instead of printf_vma. Adjust recursive calls. (collection_list::stringify): Use paddress and phex_nz instead of sprintf_vma. Adjust add_memrange call. * tracepoint.h (collection_list::add_memrange): Declare new method. --- gdb/tracepoint.c | 60 ++++++++++++++++++++++++++------------------------------ gdb/tracepoint.h | 3 ++- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 0cb12c7..7435380 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -906,15 +906,12 @@ collection_list::add_register (unsigned int regno) /* Add a memrange to a collection list. */ void -collection_list::add_memrange (int type, bfd_signed_vma base, +collection_list::add_memrange (struct gdbarch *gdbarch, + int type, bfd_signed_vma base, unsigned long len) { if (info_verbose) - { - printf_filtered ("(%d,", type); - printf_vma (base); - printf_filtered (",%ld)\n", len); - } + printf_filtered ("(%d,%s,%ld)\n", type, paddress (gdbarch, base), len); /* type: memrange_absolute == memory, other n == basereg */ /* base: addr if memory, offset if reg relative. */ @@ -955,19 +952,16 @@ collection_list::collect_symbol (struct symbol *sym, offset = SYMBOL_VALUE_ADDRESS (sym); if (info_verbose) { - char tmp[40]; - - sprintf_vma (tmp, offset); printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n", SYMBOL_PRINT_NAME (sym), len, - tmp /* address */); + paddress (gdbarch, offset)); } /* A struct may be a C++ class with static fields, go to general expression handling. */ if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT) treat_as_expr = 1; else - add_memrange (memrange_absolute, offset, len); + add_memrange (gdbarch, memrange_absolute, offset, len); break; case LOC_REGISTER: reg = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch); @@ -991,36 +985,36 @@ collection_list::collect_symbol (struct symbol *sym, offset = frame_offset + SYMBOL_VALUE (sym); if (info_verbose) { - printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset ", - SYMBOL_PRINT_NAME (sym), len); - printf_vma (offset); - printf_filtered (" from frame ptr reg %d\n", reg); + printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s" + " from frame ptr reg %d\n", + SYMBOL_PRINT_NAME (sym), len, + paddress (gdbarch, offset), reg); } - add_memrange (reg, offset, len); + add_memrange (gdbarch, reg, offset, len); break; case LOC_REGPARM_ADDR: reg = SYMBOL_VALUE (sym); offset = 0; if (info_verbose) { - printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset ", - SYMBOL_PRINT_NAME (sym), len); - printf_vma (offset); - printf_filtered (" from reg %d\n", reg); + printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset %s" + " from reg %d\n", + SYMBOL_PRINT_NAME (sym), len, + paddress (gdbarch, offset), reg); } - add_memrange (reg, offset, len); + add_memrange (gdbarch, reg, offset, len); break; case LOC_LOCAL: reg = frame_regno; offset = frame_offset + SYMBOL_VALUE (sym); if (info_verbose) { - printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset ", - SYMBOL_PRINT_NAME (sym), len); - printf_vma (offset); - printf_filtered (" from frame ptr reg %d\n", reg); + printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s" + " from frame ptr reg %d\n", + SYMBOL_PRINT_NAME (sym), len, + paddress (gdbarch, offset), reg); } - add_memrange (reg, offset, len); + add_memrange (gdbarch, reg, offset, len); break; case LOC_UNRESOLVED: @@ -1186,7 +1180,6 @@ char ** collection_list::stringify () { char temp_buf[2048]; - char tmp2[40]; int count; int ndx = 0; char *(*str_list)[]; @@ -1233,12 +1226,12 @@ collection_list::stringify () for (i = 0, count = 0, end = temp_buf; i < m_memranges.size (); i++) { QUIT; /* Allow user to bail out with ^C. */ - sprintf_vma (tmp2, m_memranges[i].start); if (info_verbose) { printf_filtered ("(%d, %s, %ld)\n", m_memranges[i].type, - tmp2, + paddress (target_gdbarch (), + m_memranges[i].start), (long) (m_memranges[i].end - m_memranges[i].start)); } @@ -1259,9 +1252,11 @@ collection_list::stringify () "FFFFFFFF" (or more, depending on sizeof (unsigned)). Special-case it. */ if (m_memranges[i].type == memrange_absolute) - sprintf (end, "M-1,%s,%lX", tmp2, (long) length); + sprintf (end, "M-1,%s,%lX", phex_nz (m_memranges[i].start, 0), + (long) length); else - sprintf (end, "M%X,%s,%lX", m_memranges[i].type, tmp2, (long) length); + sprintf (end, "M%X,%s,%lX", m_memranges[i].type, + phex_nz (m_memranges[i].start, 0), (long) length); } count += strlen (end); @@ -1454,7 +1449,8 @@ encode_actions_1 (struct command_line *action, addr = value_address (tempval); /* Initialize the TYPE_LENGTH if it is a typedef. */ check_typedef (exp->elts[1].type); - collect->add_memrange (memrange_absolute, addr, + collect->add_memrange (target_gdbarch (), + memrange_absolute, addr, TYPE_LENGTH (exp->elts[1].type)); collect->append_exp (exp.get ()); break; diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h index 855bb1d..36eeee6 100644 --- a/gdb/tracepoint.h +++ b/gdb/tracepoint.h @@ -252,7 +252,8 @@ public: void add_aexpr (agent_expr_up aexpr); void add_register (unsigned int regno); - void add_memrange (int type, bfd_signed_vma base, + void add_memrange (struct gdbarch *gdbarch, + int type, bfd_signed_vma base, unsigned long len); void collect_symbol (struct symbol *sym, struct gdbarch *gdbarch, -- 2.5.5