From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 49577 invoked by alias); 14 Feb 2020 20:15:03 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 49533 invoked by uid 89); 14 Feb 2020 20:15:02 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.1 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,MISSING_HEADERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=UD:foo.o, HX-Received:sk:q127mr4, fooo, foo.o X-HELO: mail-pl1-f201.google.com Received: from mail-pl1-f201.google.com (HELO mail-pl1-f201.google.com) (209.85.214.201) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 14 Feb 2020 20:15:01 +0000 Received: by mail-pl1-f201.google.com with SMTP id 36so5796032plc.12 for ; Fri, 14 Feb 2020 12:15:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:cc; bh=FUC0c2S2ZtK4J1a3FokTYFnZ04TKxLAxVduAi2oZfGg=; b=fc6DXKkOMGEY4fvVahXkHVa31J1W1oUCBBI2++Dh1KVcaz9+79d1SO1YgCyx5Geq67 oiYoogbta0T03XSmmqkLhoDTLHY8IZSAtt96IlWdxi4ZNI0GYK5idM2zNVhpQbog0i8J UHfEDW4byrwDA1gqWXHK0k2Bzr9d0N2SeimBP1lsbTgzs83DzG/cRjPj/VIHM5j7t1Xh FI6NV9/SA6yLO1It7oqdxO1KaGEElp8Hwi9GsQljtRbWN/MMWIfRiEfaRBmCPVGNIMD8 LYbGODLEZx22VXo4HANBCvuod2xcGg30ccL9ihXdMPZ7ydS/mEX1eWC/c8PpzhPOIzYV aPNA== Date: Fri, 14 Feb 2020 20:15:00 -0000 Message-Id: <20200214201441.146590-1-rupprecht@google.com> Mime-Version: 1.0 Subject: [PATCH] Demangle names when using --line-numbers --disassemble. From: "Jordan Rupprecht via binutils" Reply-To: Jordan Rupprecht Cc: binutils@sourceware.org, Jordan Rupprecht Content-Type: text/plain; charset="UTF-8" X-SW-Source: 2020-02/txt/msg00369.txt.bz2 This fixes the lack of demangling of names within interleaved disassembly, such as: ``` $ echo "namespace xyz { void foo(){} }" | g++ -x c++ -c - -o foo.o && objdump -ldC foo.o ... Disassembly of section .text: 0000000000000000 : _ZN3xyz3fooEv(): 0: 55 push %rbp ``` With this patch: ``` Disassembly of section .text: 0000000000000000 : xyz::foo(): 0: 55 push %rbp ``` --- binutils/ChangeLog | 4 ++++ binutils/objdump.c | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 06bbf5d6b7..8153160223 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2020-02-14 Jordan Rupprecht + + * objdump.c (show_line): call bfd_demangle when using do_demangle. + 2020-02-10 Fangrui Song * objcopy.c (parse_flags): Handle "exclude". diff --git a/binutils/objdump.c b/binutils/objdump.c index 8182dcc362..6eef38f0e2 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -1734,8 +1734,22 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset) && (prev_functionname == NULL || strcmp (functionname, prev_functionname) != 0)) { - printf ("%s():\n", sanitize_string (functionname)); + char *demangle_alloc = NULL; + if (do_demangle && functionname[0] != '\0') + { + /* Demangle the name. */ + demangle_alloc = bfd_demangle (abfd, functionname, + demangle_flags); + } + + /* Demangling adds trailing parens, so don't print those. */ + if (demangle_alloc != NULL) + printf ("%s:\n", sanitize_string (demangle_alloc)); + else + printf ("%s():\n", sanitize_string (functionname)); + prev_line = -1; + free (demangle_alloc); } if (linenumber > 0 && (linenumber != prev_line -- 2.25.0.265.gbab2e86ba0-goog