Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1651241ybt; Thu, 18 Jun 2020 13:54:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzx7X91H3ywh1QpJG/ov1jLEQKOpCCciiN4COZdPtmBB8XTr5NcLw4J0epCka1DAcUrHIbg X-Received: by 2002:a17:907:35c9:: with SMTP id ap9mr510376ejc.81.1592513690084; Thu, 18 Jun 2020 13:54:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592513690; cv=none; d=google.com; s=arc-20160816; b=BWfQRhBgMqYC8Iy8EmIcKqk4/rsJgDkX7EYqX7pcdWIX9uhMZQPlb66LlwaN8hPs/9 xyKmQmBuxiODD3SZmegn4y8ya78d8GFM93Rsk8caKYjCU2c2MHczLJERN85QG/StFIjs 2vComS36pEOhMeGLO5K5jao8z6avY8p4x2+95CjWfFCdv1yhg16P8pKUTYeQNLiXf4H9 L1C/Vm2a9KPX75EdLlc0Wl2NVLgS71sqtfi2AnXpKmDmTxATMELY7tyrKTfNp+CR2RS0 VODP1D1/aXGJO1MSo8mueHLYOkPS04g3Celpvjy9bM8vaHbvt3qP13uq86m73mtNHNZt M62w== 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=vo48KE7eyux1jly0OlWQ97C+gk8zT3bBytH8b2TFJpc=; b=g8ci5r4ng/5qG6PsNW3lhBFQkFmprqlihnSBx6dtX6pFiyt0yggPV2jZzuRUi33z7G Cw3NH2V89QZW8FzRes+fBEPOLskk1HVqGI1nYquoPRoFFMwZbsFMBQ7/Lsp2LrmyMARY k4YHi3bfG2g/6bO6rMAbEldFLbp7Sd2+0n1SRx2cJEuSa93VgFhYoEqX3VdnP3yvMHav Yac1JA8gUOu1MgZ0rLleLG3gxrXy/vkyNRWZiIa1cFj7ndJtKru7hzLqpW8xTxlSL47o AZErUmHFSI0mpWixQkp57zoyGRO0iQj5FZDxa1J1U8rDkrUTgoEiOjlV50raELZKKlS0 D9sg== 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 n15si2550412ejd.527.2020.06.18.13.54.27; Thu, 18 Jun 2020 13:54:50 -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 S1727083AbgFRUnW (ORCPT + 99 others); Thu, 18 Jun 2020 16:43:22 -0400 Received: from ex13-edg-ou-002.vmware.com ([208.91.0.190]:48844 "EHLO EX13-EDG-OU-002.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730883AbgFRUjH (ORCPT ); Thu, 18 Jun 2020 16:39:07 -0400 Received: from sc9-mailhost2.vmware.com (10.113.161.72) by EX13-EDG-OU-002.vmware.com (10.113.208.156) with Microsoft SMTP Server id 15.0.1156.6; Thu, 18 Jun 2020 13:38:58 -0700 Received: from sc9-mailhost2.vmware.com (unknown [10.129.221.29]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id BBCD4B2656; Thu, 18 Jun 2020 16:39:01 -0400 (EDT) From: Matt Helsley To: CC: Josh Poimboeuf , Peter Zijlstra , Steven Rostedt , Julien Thierry , Kamalesh Babulal , Matt Helsley Subject: [RFC][PATCH v5 04/51] objtool: recordmcount: Start using objtool's elf wrapper Date: Thu, 18 Jun 2020 13:37:50 -0700 Message-ID: X-Mailer: git-send-email 2.25.4 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 Use struct elf to grab the file descriptor. We will later move these calls into other functions as we expand the lifetime of the struct elf so that it can be passed to objtool elf.[ch] functions. This creates the libelf/objtool data structures and gives us two separate ways to walk the ELF file -- the libelf/objtool way and the old recordmcount wrapper way which avoids these extra data structures by using indices, offsets, and pointers into the mmapped ELF file. Subsequent patches will convert from the old recordmcount accessors to the libelf/objtool accessors. Signed-off-by: Matt Helsley --- tools/objtool/recordmcount.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tools/objtool/recordmcount.c b/tools/objtool/recordmcount.c index 601e83840085..b2c606eb269b 100644 --- a/tools/objtool/recordmcount.c +++ b/tools/objtool/recordmcount.c @@ -33,6 +33,8 @@ #include "objtool.h" +#include "elf.h" + #ifndef EM_AARCH64 #define EM_AARCH64 183 #define R_AARCH64_NONE 0 @@ -57,6 +59,8 @@ static void *file_ptr; /* current file pointer location */ static void *file_append; /* added to the end of the file */ static size_t file_append_size; /* how much is added to end of file */ +static struct elf *lf; + /* Per-file resource cleanup when multiple files. */ static void file_append_cleanup(void) { @@ -73,6 +77,9 @@ static void mmap_cleanup(void) else free(file_map); file_map = NULL; + if (lf) + elf_close(lf); + lf = NULL; } /* ulseek, uwrite, ...: Check return value for errors. */ @@ -170,11 +177,12 @@ static void *mmap_file(char const *fname) file_updated = 0; sb.st_size = 0; - fd_map = open(fname, O_RDONLY); - if (fd_map < 0) { + lf = elf_open_read(fname, O_RDONLY); + if (!lf) { perror(fname); return NULL; } + fd_map = lf->fd; if (fstat(fd_map, &sb) < 0) { perror(fname); goto out; @@ -194,14 +202,14 @@ static void *mmap_file(char const *fname) } if (read(fd_map, file_map, sb.st_size) != sb.st_size) { perror(fname); - free(file_map); - file_map = NULL; + mmap_cleanup(); goto out; } } else mmap_failed = 0; out: - close(fd_map); + elf_close(lf); + lf = NULL; fd_map = -1; file_end = file_map + sb.st_size; -- 2.20.1