Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp685286pxa; Wed, 12 Aug 2020 10:59:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx8DvsA6WuHNCph5matRTN34Qnx+G/pWEMSdA7zvFOy7X7Xqb2V4CUrCFqBWsSGfWGBumvO X-Received: by 2002:a50:d1d4:: with SMTP id i20mr1093971edg.320.1597255170807; Wed, 12 Aug 2020 10:59:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597255170; cv=none; d=google.com; s=arc-20160816; b=NCgsWzWhJOejys/quLpCxArVNmaXl/TVP2th3kxx1YEE9TJZl0SE2ONjA1kPeqaSd6 flNdMXH4rRzIPWahAhjtPVPg06kZ3+J2ssEJff4geb/WgGgGRd4VPhZY7hfHYbXxkQcG /eWTyuydZvfOs3bUt7rxPiQ06TEUG6dM0GVgsUj2OpDDt3j8FyYfp2Q5Je9ASAQzAsI6 1SYBwizY1IR5H9iA9i1v+tGEdFCRVQklvDEUHPO7Ua7nOEin8gqqPLfxZJ3pu1V+h7v8 h+nABgqnMR9ha7bpvDgS+MOfRu769EiZd3FX7FPU39IAswd/cwaMNBUlQT6BhO3CVjOz saWA== 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 :message-id:date:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=uRLCEYAR6WCUaLrZvJ35MiwgK7I6iUa4gjIqbJ/bsoE=; b=zEr5UMsMCRYjZFx4FakivMIO4AGt7i2RjST+3wLVGy1KtJnIi4a9235wmZduP7KVBJ YWQZzgaYMa6RojvRW1EcTzbXvAJl5PCRi6xfMfcO96JtHF9Gpep0r3HmFNWUtr63R29x diFXrSQpLiUiaSav31lkBLQTzGS/l92DRUK3VSe3Krl9hkoaEHJV7KZbtM09I+fEVbUJ N8cpwgoQ8TbsOPt8/4d2tt3CoegrJnbn5O2gvf7top2rKcMoO0LEtkW3ordRZG6ga4uJ 6Y9PxBWvDMGbXL5QOOZqoW8zyVX//N8f3bdKp/MMKhdPn4WDjOfIfHBhJmd9uQkqVyLZ BjuA== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b13si1707751ejq.223.2020.08.12.10.59.07; Wed, 12 Aug 2020 10:59:30 -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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726568AbgHLR5l (ORCPT + 99 others); Wed, 12 Aug 2020 13:57:41 -0400 Received: from mga14.intel.com ([192.55.52.115]:26216 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726394AbgHLR5k (ORCPT ); Wed, 12 Aug 2020 13:57:40 -0400 IronPort-SDR: +oJdrqhFuEDCDMhamysOFNL8q4gji2cCGT38C5lLCHBnNIAoxgxXWqm1zTK9DhCzoYVnxBCnqY 1rGrj7ucNl7A== X-IronPort-AV: E=McAfee;i="6000,8403,9711"; a="153246798" X-IronPort-AV: E=Sophos;i="5.76,305,1592895600"; d="scan'208";a="153246798" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Aug 2020 10:57:39 -0700 IronPort-SDR: xTwv1iZ79CTx+SFvA7fplLSaDcfHXYgp4Pk2hKuzjbS7gH+Hwac/c7TR2r1bbHXyT2ELcTVSMK de6WDfiV0l9w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,305,1592895600"; d="scan'208";a="439468014" Received: from kcaccard-mobl.amr.corp.intel.com (HELO kcaccard-mobl1.jf.intel.com) ([10.212.13.108]) by orsmga004.jf.intel.com with ESMTP; 12 Aug 2020 10:57:37 -0700 From: Kristen Carlson Accardi To: Josh Poimboeuf , Peter Zijlstra Cc: Kristen Carlson Accardi , linux-kernel@vger.kernel.org Subject: [PATCH] objtool: support symtab_shndx during dump Date: Wed, 12 Aug 2020 10:57:11 -0700 Message-Id: <20200812175712.9462-1-kristen@linux.intel.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When getting the symbol index number, make sure to use the extended symbol table information in order to support symbol index's greater than 64K. Signed-off-by: Kristen Carlson Accardi --- tools/objtool/orc_dump.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tools/objtool/orc_dump.c b/tools/objtool/orc_dump.c index fca46e006fc2..cf835069724a 100644 --- a/tools/objtool/orc_dump.c +++ b/tools/objtool/orc_dump.c @@ -74,7 +74,8 @@ int orc_dump(const char *_objname) GElf_Rela rela; GElf_Sym sym; Elf_Data *data, *symtab = NULL, *rela_orc_ip = NULL; - + Elf_Data *xsymtab = NULL; + Elf32_Word shndx; objname = _objname; @@ -138,6 +139,8 @@ int orc_dump(const char *_objname) orc_ip_addr = sh.sh_addr; } else if (!strcmp(name, ".rela.orc_unwind_ip")) { rela_orc_ip = data; + } else if (!strcmp(name, ".symtab_shndx")) { + xsymtab = data; } } @@ -157,13 +160,22 @@ int orc_dump(const char *_objname) return -1; } - if (!gelf_getsym(symtab, GELF_R_SYM(rela.r_info), &sym)) { - WARN_ELF("gelf_getsym"); + if (!gelf_getsymshndx(symtab, xsymtab, + GELF_R_SYM(rela.r_info), + &sym, &shndx)) { + WARN_ELF("gelf_getsymshndx"); return -1; } if (GELF_ST_TYPE(sym.st_info) == STT_SECTION) { - scn = elf_getscn(elf, sym.st_shndx); + if ((sym.st_shndx > SHN_UNDEF && + sym.st_shndx < SHN_LORESERVE) || + (xsymtab && sym.st_shndx == SHN_XINDEX)) { + if (sym.st_shndx != SHN_XINDEX) + shndx = sym.st_shndx; + } + + scn = elf_getscn(elf, shndx); if (!scn) { WARN_ELF("elf_getscn"); return -1; -- 2.20.1