Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp910195ybb; Fri, 10 Apr 2020 12:38:23 -0700 (PDT) X-Google-Smtp-Source: APiQypJgp4Q4pkAx8oVGW1ZU9p4JPjtEVnB1Z+8M05YbU8yhBy6LsEBghKOFkTwwGOekboVPEkC5 X-Received: by 2002:ac8:ff2:: with SMTP id f47mr829869qtk.48.1586547503082; Fri, 10 Apr 2020 12:38:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586547503; cv=none; d=google.com; s=arc-20160816; b=CzmpIbo9mHHinZAbhN18J8pndElLCgH1jSI4jEVgMi5DSwP/Ly4vVETvLlgKgxbIov XiOPnYiOFZsGqdU0H8dlnjh1mJRTm8jwap71eCTzAl0oKM9I9K9vI0iMPGYGZAAmDigb Ce4E86qcK08tqfZwKRVmDZRy+CIHZ2x8kLmXzX1UECPjWskKwamxp9KMcaCfUQeDnclm Q+J2MuvXECB5B/Xjso7cZzsPYyXFZmAHcPwk1q2laWdYC06K35vt+k5Rz427qmFTaNOq pOIAt6rmaScuyrQTZKb2Gzx6pJAMaEU1sNGKNigaJnKHOBKU9JD4BmqBlAx80g6NGmVi zRzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=vbxwBDXZhvJ91sD+5DC0C0BFNneG2a3UdTeKQmB5oF0=; b=bla/3HGK+qhwtNnVsNncUUk+htwzynl9FGL43r1t8dF42cGGnLvz4ceOCsbi1kn7So c0fNjuP5S6lX2RhAUNNPO7d+w1ec9MWf3UeuwOS/wjI8X7iEAksBpIlv6E9yDLTngYf2 jeFXKkoGWbyHs4YKOoyYJQjhh8fF5hy4JIhMIydMsUAr4kF3C/WsPASP9khqAK6WfSnt SrpG0uMPB5sz8IuaJNJYD6Pe4KL9xmOdlvrCZC8ZL1WKLvW5TvoPcVj94//iyzs46eCM /juuijYfLElS0tF+HEZ3KbZdwsU1pBMmQbee/yOYd+ip2OCsl5iN4NqobzdDhU/g6dli uz3Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d13si1546821qvo.115.2020.04.10.12.38.08; Fri, 10 Apr 2020 12:38:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726626AbgDJThC (ORCPT + 99 others); Fri, 10 Apr 2020 15:37:02 -0400 Received: from ex13-edg-ou-002.vmware.com ([208.91.0.190]:17475 "EHLO EX13-EDG-OU-002.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726847AbgDJThC (ORCPT ); Fri, 10 Apr 2020 15:37:02 -0400 Received: from sc9-mailhost3.vmware.com (10.113.161.73) by EX13-EDG-OU-002.vmware.com (10.113.208.156) with Microsoft SMTP Server id 15.0.1156.6; Fri, 10 Apr 2020 12:36:57 -0700 Received: from sc9-mailhost3.vmware.com (unknown [10.166.69.226]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id 36CAB40BBE; Fri, 10 Apr 2020 12:37:01 -0700 (PDT) From: Matt Helsley To: CC: Josh Poimboeuf , Peter Zijlstra , Julien Thierry , Ingo Molnar , Steven Rostedt , Miroslav Benes , Matt Helsley Subject: [RFC][PATCH 09/36] objtool: recordmcount: Search for __mcount_loc before walking the sections Date: Fri, 10 Apr 2020 12:35:32 -0700 Message-ID: <88f2bfd4259b2e951cb9a6a96d2534df2a9be9fa.1586468801.git.mhelsley@vmware.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII Received-SPF: None (EX13-EDG-OU-002.vmware.com: mhelsley@vmware.com does not designate permitted sender hosts) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org recordmcount iterates over the sections in the order they're listed in the ELF file and checks whether the section name indicates it's of interest. Objtool's elf code works differently -- it scans the elf file and builds up data structures representing the headers, sections, etc. and then supplies functions to search these structures. Both walk the elf file in order, however objtool uses more memory to enable faster searches it needs for other tools such as the reliable backtrace support offered by the ORC unwinder. Rather than walk the section table a second time in the recordmcount code, we use objtool's elf code to search for the section recordmcount is interested in. This also simplifies flow and means we can easily check for already-processed object files before we do any of the more complex things recordmcount does. This also allows us to remove the already_has_rel_mcount string pointer trick. Signed-off-by: Matt Helsley --- tools/objtool/recordmcount.c | 4 ---- tools/objtool/recordmcount.h | 17 +++-------------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/tools/objtool/recordmcount.c b/tools/objtool/recordmcount.c index 69da5339575f..46a275a393a8 100644 --- a/tools/objtool/recordmcount.c +++ b/tools/objtool/recordmcount.c @@ -208,8 +208,6 @@ static void *mmap_file(char const *fname) } else mmap_failed = 0; out: - elf_close(lf); - lf = NULL; fd_map = -1; file_end = file_map + sb.st_size; @@ -424,8 +422,6 @@ static int is_mcounted_section_name(char const *const txtname) strcmp(".cpuidle.text", txtname) == 0; } -static char const *already_has_rel_mcount = "success"; /* our work here is done! */ - /* 32 bit and 64 bit are very similar */ #include "recordmcount.h" #define RECORD_MCOUNT_64 diff --git a/tools/objtool/recordmcount.h b/tools/objtool/recordmcount.h index 74eab03e31d4..1a848b8104c8 100644 --- a/tools/objtool/recordmcount.h +++ b/tools/objtool/recordmcount.h @@ -473,11 +473,6 @@ static char const * __has_rel_mcount(Elf_Shdr const *const relhdr, /* reltype */ Elf_Shdr const *const txthdr = &shdr0[w(relhdr->sh_info)]; char const *const txtname = &shstrtab[w(txthdr->sh_name)]; - if (strcmp("__mcount_loc", txtname) == 0) { - fprintf(stderr, "warning: __mcount_loc already exists: %s\n", - fname); - return already_has_rel_mcount; - } if (w(txthdr->sh_type) != SHT_PROGBITS || !(_w(txthdr->sh_flags) & SHF_EXECINSTR)) return NULL; @@ -506,10 +501,6 @@ static unsigned tot_relsize(Elf_Shdr const *const shdr0, for (; nhdr; --nhdr, ++shdrp) { txtname = has_rel_mcount(shdrp, shdr0, shstrtab, fname); - if (txtname == already_has_rel_mcount) { - totrelsz = 0; - break; - } if (txtname && is_mcounted_section_name(txtname)) totrelsz += _w(shdrp->sh_size); } @@ -545,6 +536,9 @@ static int do_func(Elf_Ehdr *const ehdr, char const *const fname, int result = 0; + if (find_section_by_name(lf, "__mcount_loc") != NULL) + return 0; + totrelsz = tot_relsize(shdr0, nhdr, shstrtab, fname); if (totrelsz == 0) return 0; @@ -564,11 +558,6 @@ static int do_func(Elf_Ehdr *const ehdr, char const *const fname, for (relhdr = shdr0, k = nhdr; k; --k, ++relhdr) { char const *const txtname = has_rel_mcount(relhdr, shdr0, shstrtab, fname); - if (txtname == already_has_rel_mcount) { - result = 0; - file_updated = 0; - goto out; /* Nothing to be done; don't append! */ - } if (txtname && is_mcounted_section_name(txtname)) { unsigned int recsym; uint_t recval = 0; -- 2.20.1