Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1544250ybg; Tue, 2 Jun 2020 12:56:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0EWbDKuV1cSJQpyufZ4UlxkYr7FpGYmXc6WiScbLN6ckm2zPibnEzW63ZagEPhJeYtUKo X-Received: by 2002:a17:906:51c9:: with SMTP id v9mr18112888ejk.337.1591127765468; Tue, 02 Jun 2020 12:56:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591127765; cv=none; d=google.com; s=arc-20160816; b=nMA5CaGkkyISHeStDcCr5TuEaKJACLrpGR102zOyKapS6g4xIXGboUwCswh+gJ2+NR PSp7/gWAAS7iBz+H0O8jxfp+b/ENVIv1baD6q18tS3Ifnuozc89POENoPPtwg4QOM7Vf U/wmjsMxE4TmSWSMYpYrsXpjAwhXWw/CcWepx+FuRALBcsDmwi3KeybnW4RtSF6EKjYK p1nkO0UwatdW7M3n5LSRA/IAyBY4nJIesnH7BwVVhtoFxaqqkG0JEMCgWevDyIguRcXR wKJmNJF6ZmtPlTBQuRCsuZISPl/yVQYr9Ky2ym0+pEVyeWM+dZk9nSf0WS6AnkXjtQhX MGBQ== 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=bnnpcLhozcEOTSpjWIXj5DCxyTZi+4cxPfvbBWr5YlM=; b=KSIriMe+xATrw1QpsfXXQ3aZb/ein5eB/y8frmnMsVKwGuEaCkG/fyUjjqtQOO5JCA D4Kcuf4GCFU5aErJzbR5hCHNFEZ2DH7vak/vtZnGoaRQXe5oqJuj3lSaNlFBs92UGlWR gNLimwPosLSvdGKkRd8fKnFV1GGEi5ZvjC93IKJUgnInNseK6dk4R3Z98sv6zWewgqx5 rjyqI6Dvync3Yc7Yji0jbRtrvZjvsQ/LhOQLj47+05Qp/jnGvJgYQBplAE5IhOAqvkNO xnH2lwC/H1HADmkopKKCCTfG+/gzEME+a/3hZnABhEpFlnGayuX4jvn7gf2WILYrjiXy CEbQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y2si1912141edu.320.2020.06.02.12.55.42; Tue, 02 Jun 2020 12:56:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728736AbgFBTww (ORCPT + 99 others); Tue, 2 Jun 2020 15:52:52 -0400 Received: from ex13-edg-ou-002.vmware.com ([208.91.0.190]:36862 "EHLO EX13-EDG-OU-002.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728187AbgFBTuu (ORCPT ); Tue, 2 Jun 2020 15:50:50 -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; Tue, 2 Jun 2020 12:50:49 -0700 Received: from sc9-mailhost3.vmware.com (unknown [10.200.192.49]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id 9EFDC40BF6; Tue, 2 Jun 2020 12:50:49 -0700 (PDT) From: Matt Helsley To: CC: Josh Poimboeuf , Peter Zijlstra , Steven Rostedt , Sami Tolvanen , Julien Thierry , Kamalesh Babulal , Matt Helsley Subject: [RFC][PATCH v4 04/32] objtool: recordmcount: Search for __mcount_loc before walking the sections Date: Tue, 2 Jun 2020 12:49:57 -0700 Message-ID: <260040cef353f2b7fa20864c40c46b33691e70f3.1591125127.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 b2c606eb269b..f585bf7f45f5 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