Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp702651ybl; Sat, 18 Jan 2020 09:05:29 -0800 (PST) X-Google-Smtp-Source: APXvYqx0+Y9l9LtYqf5fkPTNSpCyI5ONKGob7pWtqSA650kORmb9lnqf/iZrg7uI0KAIQT/AYA+N X-Received: by 2002:aca:530e:: with SMTP id h14mr7500681oib.105.1579367129421; Sat, 18 Jan 2020 09:05:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579367129; cv=none; d=google.com; s=arc-20160816; b=C5rZHzRJLY4Uep5jfseBgWw06Mm+eERktH1K2BfdLfcc2UBWNk7Zuwn+SPYIXsJs13 VqTleNC8yTlIWw4iw9UiqpMghTpymlxPLgdZiD76OmQrZe0yjGOJCCSVwYuaseX1iCdJ opgJ4zxkeYeakZG34rkoHhCu/+4Ugi7itbsaTMgGFCfCab17UxJsYevwirB1gFWb40U2 v+FbXXDMdSnRDAM/1evVffruR+AY95+jEKHpcZ72E0YPVzRFw2tQfbhEOEfUVcD2bnbY z9mSJZoR/AhCB1jTWYG+nZ8Qqj1qRK+qJ7xTq1TcHuamZ/4Ar8iX2YxXB++YjSuveI3x jYow== 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; bh=xSxutWgcK5YgjSVmVaTH4SIDjEmwiosWwkxqIzFGrCc=; b=LrlsDI4TjIUDdX25/s8ahsyC0IvH+4PEmS5ctTSEN9i+6MtreByyW9YvxhW11X0jJT Jx++01GG5rw0Tmq8o0eYx/LwWyvK5M7JZIk7YpeWlGIVZgwbBqvpUJc84fZ9Nl9X8jyK iVZidUqITs+nxArH4hnzGvd+GB9pBcRof7g5F3YDJ0I13pArEHJz55f/1rDf8QBBQE7s LXFjsOTAznuuHsEUIq+wIAcyg3vXQLh5Wa+QDjpCY8RY3HlFgzqYqK9wSb5mu0cftHcv F8Av/B8Mct/exRZewzDhG4mqdzfrhTek6+lAQf3zENRWk7c47W/2EWEwctH5Za1tzTgx PM6Q== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g2si16733656otn.117.2020.01.18.09.05.16; Sat, 18 Jan 2020 09:05:29 -0800 (PST) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726740AbgARREV (ORCPT + 99 others); Sat, 18 Jan 2020 12:04:21 -0500 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:48293 "EHLO relay1-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726455AbgARREU (ORCPT ); Sat, 18 Jan 2020 12:04:20 -0500 X-Originating-IP: 79.86.19.127 Received: from debian.numericable.fr (127.19.86.79.rev.sfr.net [79.86.19.127]) (Authenticated sender: alex@ghiti.fr) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 66CDB240002; Sat, 18 Jan 2020 17:03:56 +0000 (UTC) From: Alexandre Ghiti To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Stephen Rothwell , Alexei Starovoitov , linux-next@vger.kernel.org, Zong Li , Palmer Dabbelt Cc: Alexandre Ghiti Subject: [PATCH v2] powerpc: Do not consider weak unresolved symbol relocations as bad Date: Sat, 18 Jan 2020 12:03:35 -0500 Message-Id: <20200118170335.21440-1-alex@ghiti.fr> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 8580ac9404f6 ("bpf: Process in-kernel BTF") introduced two weak symbols that may be unresolved at link time which result in an absolute relocation to 0. relocs_check.sh emits the following warning: "WARNING: 2 bad relocations c000000001a41478 R_PPC64_ADDR64 _binary__btf_vmlinux_bin_start c000000001a41480 R_PPC64_ADDR64 _binary__btf_vmlinux_bin_end" whereas those relocations are legitimate even for a relocatable kernel compiled with -pie option. relocs_check.sh already excluded some weak unresolved symbols explicitly: remove those hardcoded symbols and add some logic that parses the symbols using nm, retrieves all the weak unresolved symbols and excludes those from the list of the potential bad relocations. Reported-by: Stephen Rothwell Signed-off-by: Alexandre Ghiti --- Changes in v2: - Follow Stephen advice of using grep -F instead of looping over weak symbols using read, patch is way smaller and cleaner. - Add missing nm in comment arch/powerpc/Makefile.postlink | 4 ++-- arch/powerpc/tools/relocs_check.sh | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/arch/powerpc/Makefile.postlink b/arch/powerpc/Makefile.postlink index 134f12f89b92..2268396ff4bb 100644 --- a/arch/powerpc/Makefile.postlink +++ b/arch/powerpc/Makefile.postlink @@ -17,11 +17,11 @@ quiet_cmd_head_check = CHKHEAD $@ quiet_cmd_relocs_check = CHKREL $@ ifdef CONFIG_PPC_BOOK3S_64 cmd_relocs_check = \ - $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@" ; \ + $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$(NM)" "$@" ; \ $(BASH) $(srctree)/arch/powerpc/tools/unrel_branch_check.sh "$(OBJDUMP)" "$@" else cmd_relocs_check = \ - $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$@" + $(CONFIG_SHELL) $(srctree)/arch/powerpc/tools/relocs_check.sh "$(OBJDUMP)" "$(NM)" "$@" endif # `@true` prevents complaint when there is nothing to be done diff --git a/arch/powerpc/tools/relocs_check.sh b/arch/powerpc/tools/relocs_check.sh index 7b9fe0a567cf..014e00e74d2b 100755 --- a/arch/powerpc/tools/relocs_check.sh +++ b/arch/powerpc/tools/relocs_check.sh @@ -10,14 +10,21 @@ # based on relocs_check.pl # Copyright © 2009 IBM Corporation -if [ $# -lt 2 ]; then - echo "$0 [path to objdump] [path to vmlinux]" 1>&2 +if [ $# -lt 3 ]; then + echo "$0 [path to objdump] [path to nm] [path to vmlinux]" 1>&2 exit 1 fi -# Have Kbuild supply the path to objdump so we handle cross compilation. +# Have Kbuild supply the path to objdump and nm so we handle cross compilation. objdump="$1" -vmlinux="$2" +nm="$2" +vmlinux="$3" + +# Remove from the bad relocations those that match an undefined weak symbol +# which will result in an absolute relocation to 0. +# Weak unresolved symbols are of that form in nm output: +# " w _binary__btf_vmlinux_bin_end" +undef_weak_symbols=$($nm "$vmlinux" | awk '$1 ~ /w/ { print $2 }') bad_relocs=$( $objdump -R "$vmlinux" | @@ -26,8 +33,6 @@ $objdump -R "$vmlinux" | # These relocations are okay # On PPC64: # R_PPC64_RELATIVE, R_PPC64_NONE - # R_PPC64_ADDR64 mach_ - # R_PPC64_ADDR64 __crc_ # On PPC: # R_PPC_RELATIVE, R_PPC_ADDR16_HI, # R_PPC_ADDR16_HA,R_PPC_ADDR16_LO, @@ -39,8 +44,7 @@ R_PPC_ADDR16_HI R_PPC_ADDR16_HA R_PPC_RELATIVE R_PPC_NONE' | - grep -E -v '\