Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2146050ybl; Thu, 30 Jan 2020 12:09:38 -0800 (PST) X-Google-Smtp-Source: APXvYqyMfdnfOQrRkE/Qp6zNbZW+TfKByOS9AJsjTMrPQLjTO/qrLRGHpsaIJVS9IScELjCN1EsK X-Received: by 2002:a05:6808:b23:: with SMTP id t3mr4106632oij.88.1580414978516; Thu, 30 Jan 2020 12:09:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580414978; cv=none; d=google.com; s=arc-20160816; b=YYNF8WK5T0GA0dNEwIM/c7F6175vh5STDJUo8ccKS9YueKPMfaHYsLbNklZaHc94ge iwt8JkftUTcgaY00rO8rSN+VR5Xlr/ZTo77oa+5L7T47LoouG4IrGP3okLqLeHsro86V VRryg7v3dONV6MmKKSDGXKpyvJCP65roNRYRu9lhyukdcYKB7vIyEpXQFd1oy9Q5Ao4a eJmyFXQfCTKlPUZ/eLNSrROnFBB5QFKP5lnaM+VUdEAZCeAaF1MD6B1QDVcRFADUBVrP gej9T3WNlpHmP8eaJWE4XFZbiAAUNGEa+9PAcqBkyiawgM497A1rW3H281lPkHgLodYE Lpyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject; bh=obSbjQLtcGkNB/hOpVmrZO74EmbeISDPXTe6R3KuNzU=; b=sujVnDHmQBx6Z9KxzfjhmgKyXL7OJzvQI2TMPvCJ/fMHJvMMFQEd/LvmqehmA/dhJ0 ednqEbCtJgzPZGjx9BtWCL0bP3bX1mZvYI4LE0uR1VNchOraSAFPz/Ec3QPAxAZzIHPi Vnb+PTgg9zbwZpGPVB64xxaihdAYgJOVrUbF44EJZ1gA6ih/gB4M1Rvhva0GdfOkXzok GjOpKeXLIcFJFmkDysg77MZL2DTLUhQZi3+QQx5qgsC2Z5xEHdDhXai68aULQjNsD2G2 1lEJOQKLf7A9zN6I5UCIcqMEZxx/roMXhUZBithtZfWxl9KMXrPcFq2XclGkamRdpLeV kevg== 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 i13si3384851oth.175.2020.01.30.12.09.24; Thu, 30 Jan 2020 12:09:38 -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 S1727592AbgA3UIR (ORCPT + 99 others); Thu, 30 Jan 2020 15:08:17 -0500 Received: from relay4-d.mail.gandi.net ([217.70.183.196]:48449 "EHLO relay4-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726267AbgA3UIR (ORCPT ); Thu, 30 Jan 2020 15:08:17 -0500 X-Originating-IP: 79.86.19.127 Received: from [192.168.0.12] (127.19.86.79.rev.sfr.net [79.86.19.127]) (Authenticated sender: alex@ghiti.fr) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id EC913E0008; Thu, 30 Jan 2020 20:08:10 +0000 (UTC) Subject: Re: [PATCH v2] powerpc: Do not consider weak unresolved symbol relocations as bad 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 References: <20200118170335.21440-1-alex@ghiti.fr> From: Alex Ghiti Message-ID: <8a8d45c6-4ad2-c682-abfb-3d97188d0d45@ghiti.fr> Date: Thu, 30 Jan 2020 15:07:10 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.0 MIME-Version: 1.0 In-Reply-To: <20200118170335.21440-1-alex@ghiti.fr> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/18/20 12:03 PM, Alexandre Ghiti wrote: > 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 '\ - grep -E -v '\ + ([ "$undef_weak_symbols" ] && grep -F -w -v "$undef_weak_symbols" || cat) > ) > > if [ -z "$bad_relocs" ]; then Hi guys, Any thought about that ? I do think this patch makes the whole check about absolute relocations clearer. And in the future, it will avoid anyone to spend some time on those "bad" relocations which actually aren't. Thanks, Alex