lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2110116.YKUYFuaPT4@n9w6sw14>
Date: Tue, 11 Mar 2025 09:18:48 +0100
From: Christian Eggers <ceggers@...i.de>
To: kernel test robot <lkp@...el.com>, Nathan Chancellor <nathan@...nel.org>
CC: Russell King <linux@...linux.org.uk>, Yuntao Liu <liuyuntao12@...wei.com>,
	"Russell King (Oracle)" <rmk+kernel@...linux.org.uk>, Arnd Bergmann
	<arnd@...db.de>, Linus Walleij <linus.walleij@...aro.org>, Greg Kroah-Hartman
	<gregkh@...uxfoundation.org>, Catalin Marinas <catalin.marinas@....com>,
	<linux-arm-kernel@...ts.infradead.org>, <llvm@...ts.linux.dev>,
	<oe-kbuild-all@...ts.linux.dev>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v2 1/2] ARM: substitute OVERLAY description in linker script

[Resending, as first message got HTML'ed by my mailer...]

Hi Nathan,


thanks for pushing this into the right direction.  Actually I didn't recognize that
lld complains about overlapping virtual address ranges, maybe the .config provided
by the first LKP report (which I used for testing) didn't enable the necessary options.


On Monday, 10 March 2025, 21:37:29 CET, Nathan Chancellor wrote:
> On Wed, Mar 05, 2025 at 02:49:38AM +0800, kernel test robot wrote:
> > Hi Christian,
> > 
> > kernel test robot noticed the following build errors:
> > 
> > [auto build test ERROR on soc/for-next]
> > [also build test ERROR on linus/master v6.14-rc5 next-20250304]
> > [If your patch is applied to the wrong git tree, kindly drop us a note.
> > And when submitting patch, we suggest to use '--base' as documented in
> > https://git-scm.com/docs/git-format-patch#_base_tree_information]
> > 
> > url:    https://github.com/intel-lab-lkp/linux/commits/Christian-Eggers/ARM-avoid-that-vectors-are-removed-during-linker-garbage-collection/20250224-210146
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git for-next
> > patch link:    https://lore.kernel.org/r/20250224125414.2184-1-ceggers%40arri.de
> > patch subject: [PATCH v2 1/2] ARM: substitute OVERLAY description in linker script
> > config: arm-milbeaut_m10v_defconfig (https://download.01.org/0day-ci/archive/20250305/202503050230.820w99b6-lkp@intel.com/config)
> > compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 14170b16028c087ca154878f5ed93d3089a965c6)
> > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250305/202503050230.820w99b6-lkp@intel.com/reproduce)
> > 
> > If you fix the issue in a separate patch/commit (i.e. not just a new version of
> > the same patch/commit), kindly add following tags
> > | Reported-by: kernel test robot <lkp@...el.com>
> > | Closes: https://lore.kernel.org/oe-kbuild-all/202503050230.820w99b6-lkp@intel.com/
> > 
> > All errors (new ones prefixed by >>):
> > 
> > >> ld.lld: error: section .vectors.bhb.bpiall virtual address range overlaps with .vectors.bhb.loop8
> >    >>> .vectors.bhb.bpiall range is [0xFFFF0000, 0xFFFF001F]
> >    >>> .vectors.bhb.loop8 range is [0xFFFF0000, 0xFFFF001F]
> > --
> > >> ld.lld: error: section .vectors.bhb.loop8 virtual address range overlaps with .vectors
> >    >>> .vectors.bhb.loop8 range is [0xFFFF0000, 0xFFFF001F]
> >    >>> .vectors range is [0xFFFF0000, 0xFFFF001F]
> 
> Looking at ld.lld's code, this error is intentionally ignored for
> OVERLAY:
> 
> https://github.com/llvm/llvm-project/blob/9f170e6abed4a7b393bb8abbf07ac8d6930aa3b0/lld/ELF/Writer.cpp#L2751-L2761
> 
> I have submitted a patch that allows KEEP within OVERLAY to match GNU
> ld:
> 
> https://github.com/llvm/llvm-project/pull/130661
> 
> Once/if that is accepted, we should go back to your v1 with something
> like the following diff on top to keep things working for all linkers. I
> hope that it won't take long for the ld.lld change to get reviewed and
> landed but if this needs to be fixed urgently, this whole diff minus
> '|| LLD_VERSION >= 210000' on the init/Kconfig change should work (with
> a comment change). I can always send a follow up change to add it back.


I build from an internal tree, so I am not in hurry.  As the Kconfig changes
probably should take your Signed-Off-By, I am also fine if you do the necessary
changes on my v1 and resubmit it together with your patch when it is time.


> 
> Cheers,
> Nathan
> 


regards,
Christian


> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 835b5f100e92..f3f6b7a33b79 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -121,7 +121,7 @@ config ARM
>      select HAVE_KERNEL_XZ
>      select HAVE_KPROBES if !XIP_KERNEL && !CPU_ENDIAN_BE32 && !CPU_V7M
>      select HAVE_KRETPROBES if HAVE_KPROBES
> -    select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if (LD_VERSION >= 23600 || LD_IS_LLD)
> +    select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if (LD_VERSION >= 23600 || LD_CAN_USE_KEEP_IN_OVERLAY)
>      select HAVE_MOD_ARCH_SPECIFIC
>      select HAVE_NMI
>      select HAVE_OPTPROBES if !THUMB2_KERNEL
> diff --git a/arch/arm/include/asm/vmlinux.lds.h b/arch/arm/include/asm/vmlinux.lds.h
> index f2ff79f740ab..14811b4f48ec 100644
> --- a/arch/arm/include/asm/vmlinux.lds.h
> +++ b/arch/arm/include/asm/vmlinux.lds.h
> @@ -34,6 +34,12 @@
>  #define NOCROSSREFS
>  #endif
>  
> +#ifdef CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY
> +#define OVERLAY_KEEP(x)        KEEP(x)
> +#else
> +#define OVERLAY_KEEP(x)        x
> +#endif
> +
>  /* Set start/end symbol names to the LMA for the section */
>  #define ARM_LMA(sym, section)                        \
>      sym##_start = LOADADDR(section);                \
> @@ -125,13 +131,13 @@
>      __vectors_lma = .;                        \
>      OVERLAY 0xffff0000 : NOCROSSREFS AT(__vectors_lma) {        \
>          .vectors {                        \
> -            KEEP(*(.vectors))                \
> +            OVERLAY_KEEP(*(.vectors))            \
>          }                            \
>          .vectors.bhb.loop8 {                    \
> -            KEEP(*(.vectors.bhb.loop8))            \
> +            OVERLAY_KEEP(*(.vectors.bhb.loop8))        \
>          }                            \
>          .vectors.bhb.bpiall {                    \
> -            KEEP(*(.vectors.bhb.bpiall))            \
> +            OVERLAY_KEEP(*(.vectors.bhb.bpiall))        \
>          }                            \
>      }                                \
>      ARM_LMA(__vectors, .vectors);                    \
> diff --git a/init/Kconfig b/init/Kconfig
> index d0d021b3fa3b..fc994f5cd5db 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -129,6 +129,11 @@ config CC_HAS_COUNTED_BY
>      # https://github.com/llvm/llvm-project/pull/112636
>      depends on !(CC_IS_CLANG && CLANG_VERSION < 190103)
>  
> +config LD_CAN_USE_KEEP_IN_OVERLAY
> +    # ld.lld prior to 21.0.0 did not support KEEP within an overlay description
> +    # https://github.com/llvm/llvm-project/pull/130661
> +    def_bool LD_IS_BFD || LLD_VERSION >= 210000
> +
>  config RUSTC_HAS_COERCE_POINTEE
>      def_bool RUSTC_VERSION >= 108400
>  
> 






Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ