diff mbox series

[v2] arm64: Handle .ARM.attributes section in linker scripts

Message ID 20250204-arm64-handle-arm-attributes-in-linker-script-v2-1-d684097f5554@kernel.org (mailing list archive)
State New
Headers show
Series [v2] arm64: Handle .ARM.attributes section in linker scripts | expand

Commit Message

Nathan Chancellor Feb. 4, 2025, 5:48 p.m. UTC
A recent LLVM commit [1] started generating an .ARM.attributes section
similar to the one that exists for 32-bit, which results in orphan
section warnings (or errors if CONFIG_WERROR is enabled) from the linker
because it is not handled in the arm64 linker scripts.

  ld.lld: error: arch/arm64/kernel/vdso/vgettimeofday.o:(.ARM.attributes) is being placed in '.ARM.attributes'
  ld.lld: error: arch/arm64/kernel/vdso/vgetrandom.o:(.ARM.attributes) is being placed in '.ARM.attributes'

  ld.lld: error: vmlinux.a(lib/vsprintf.o):(.ARM.attributes) is being placed in '.ARM.attributes'
  ld.lld: error: vmlinux.a(lib/win_minmax.o):(.ARM.attributes) is being placed in '.ARM.attributes'
  ld.lld: error: vmlinux.a(lib/xarray.o):(.ARM.attributes) is being placed in '.ARM.attributes'

Discard the new sections in the necessary linker scripts to resolve the
warnings, as the kernel and vDSO do not need to retain it, similar to
the .note.gnu.property section.

Cc: stable@vger.kernel.org
Fixes: b3e5d80d0c48 ("arm64/build: Warn on orphan section placement")
Link: https://github.com/llvm/llvm-project/commit/ee99c4d4845db66c4daa2373352133f4b237c942 [1]
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
---
Changes in v2:
- Discard the section instead of adding it to the final artifacts to
  mirror the .note.gnu.property section handling (Will).
- Link to v1: https://lore.kernel.org/r/20250124-arm64-handle-arm-attributes-in-linker-script-v1-1-74135b6cf349@kernel.org
---
 arch/arm64/kernel/vdso/vdso.lds.S | 1 +
 arch/arm64/kernel/vmlinux.lds.S   | 1 +
 2 files changed, 2 insertions(+)


---
base-commit: 1dd3393696efba1598aa7692939bba99d0cffae3
change-id: 20250123-arm64-handle-arm-attributes-in-linker-script-82aee25313ac

Best regards,

Comments

Will Deacon Feb. 6, 2025, 1:05 p.m. UTC | #1
Hi Nathan,

On Tue, Feb 04, 2025 at 10:48:55AM -0700, Nathan Chancellor wrote:
> A recent LLVM commit [1] started generating an .ARM.attributes section
> similar to the one that exists for 32-bit, which results in orphan
> section warnings (or errors if CONFIG_WERROR is enabled) from the linker
> because it is not handled in the arm64 linker scripts.
> 
>   ld.lld: error: arch/arm64/kernel/vdso/vgettimeofday.o:(.ARM.attributes) is being placed in '.ARM.attributes'
>   ld.lld: error: arch/arm64/kernel/vdso/vgetrandom.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> 
>   ld.lld: error: vmlinux.a(lib/vsprintf.o):(.ARM.attributes) is being placed in '.ARM.attributes'
>   ld.lld: error: vmlinux.a(lib/win_minmax.o):(.ARM.attributes) is being placed in '.ARM.attributes'
>   ld.lld: error: vmlinux.a(lib/xarray.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> 
> Discard the new sections in the necessary linker scripts to resolve the
> warnings, as the kernel and vDSO do not need to retain it, similar to
> the .note.gnu.property section.
> 
> Cc: stable@vger.kernel.org
> Fixes: b3e5d80d0c48 ("arm64/build: Warn on orphan section placement")
> Link: https://github.com/llvm/llvm-project/commit/ee99c4d4845db66c4daa2373352133f4b237c942 [1]
> Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> ---
> Changes in v2:
> - Discard the section instead of adding it to the final artifacts to
>   mirror the .note.gnu.property section handling (Will).

Thanks for the v2. Just a minor nit:

> - Link to v1: https://lore.kernel.org/r/20250124-arm64-handle-arm-attributes-in-linker-script-v1-1-74135b6cf349@kernel.org
> ---
>  arch/arm64/kernel/vdso/vdso.lds.S | 1 +
>  arch/arm64/kernel/vmlinux.lds.S   | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> index 4ec32e86a8da..8095fef66209 100644
> --- a/arch/arm64/kernel/vdso/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> @@ -80,6 +80,7 @@ SECTIONS
>  		*(.data .data.* .gnu.linkonce.d.* .sdata*)
>  		*(.bss .sbss .dynbss .dynsbss)
>  		*(.eh_frame .eh_frame_hdr)
> +		*(.ARM.attributes)
>  	}

Can we chuck this in the earlier /DISCARD/ section along with
.note.gnu.property? i.e.


diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
index 4ec32e86a8da..47ad6944f9f0 100644
--- a/arch/arm64/kernel/vdso/vdso.lds.S
+++ b/arch/arm64/kernel/vdso/vdso.lds.S
@@ -41,6 +41,7 @@ SECTIONS
         */
        /DISCARD/       : {
                *(.note.GNU-stack .note.gnu.property)
+               *(.ARM.attributes)
        }
        .note           : { *(.note.*) }                :text   :note


Will
Nathan Chancellor Feb. 6, 2025, 1:57 p.m. UTC | #2
Hi Will,

On Thu, Feb 06, 2025 at 01:05:26PM +0000, Will Deacon wrote:
> On Tue, Feb 04, 2025 at 10:48:55AM -0700, Nathan Chancellor wrote:
> > A recent LLVM commit [1] started generating an .ARM.attributes section
> > similar to the one that exists for 32-bit, which results in orphan
> > section warnings (or errors if CONFIG_WERROR is enabled) from the linker
> > because it is not handled in the arm64 linker scripts.
> > 
> >   ld.lld: error: arch/arm64/kernel/vdso/vgettimeofday.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> >   ld.lld: error: arch/arm64/kernel/vdso/vgetrandom.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> > 
> >   ld.lld: error: vmlinux.a(lib/vsprintf.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> >   ld.lld: error: vmlinux.a(lib/win_minmax.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> >   ld.lld: error: vmlinux.a(lib/xarray.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > 
> > Discard the new sections in the necessary linker scripts to resolve the
> > warnings, as the kernel and vDSO do not need to retain it, similar to
> > the .note.gnu.property section.
> > 
> > Cc: stable@vger.kernel.org
> > Fixes: b3e5d80d0c48 ("arm64/build: Warn on orphan section placement")
> > Link: https://github.com/llvm/llvm-project/commit/ee99c4d4845db66c4daa2373352133f4b237c942 [1]
> > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> > ---
> > Changes in v2:
> > - Discard the section instead of adding it to the final artifacts to
> >   mirror the .note.gnu.property section handling (Will).
> 
> Thanks for the v2. Just a minor nit:
> 
> > - Link to v1: https://lore.kernel.org/r/20250124-arm64-handle-arm-attributes-in-linker-script-v1-1-74135b6cf349@kernel.org
> > ---
> >  arch/arm64/kernel/vdso/vdso.lds.S | 1 +
> >  arch/arm64/kernel/vmlinux.lds.S   | 1 +
> >  2 files changed, 2 insertions(+)
> > 
> > diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> > index 4ec32e86a8da..8095fef66209 100644
> > --- a/arch/arm64/kernel/vdso/vdso.lds.S
> > +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> > @@ -80,6 +80,7 @@ SECTIONS
> >  		*(.data .data.* .gnu.linkonce.d.* .sdata*)
> >  		*(.bss .sbss .dynbss .dynsbss)
> >  		*(.eh_frame .eh_frame_hdr)
> > +		*(.ARM.attributes)
> >  	}
> 
> Can we chuck this in the earlier /DISCARD/ section along with
> .note.gnu.property? i.e.

Sure, I don't see why not. Do you want the comment above it updated to
mention this section or should I leave it as is?

> diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> index 4ec32e86a8da..47ad6944f9f0 100644
> --- a/arch/arm64/kernel/vdso/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> @@ -41,6 +41,7 @@ SECTIONS
>          */
>         /DISCARD/       : {
>                 *(.note.GNU-stack .note.gnu.property)
> +               *(.ARM.attributes)
>         }
>         .note           : { *(.note.*) }                :text   :note
> 
> 
> Will
Will Deacon Feb. 6, 2025, 3:22 p.m. UTC | #3
On Thu, Feb 06, 2025 at 06:57:15AM -0700, Nathan Chancellor wrote:
> Hi Will,
> 
> On Thu, Feb 06, 2025 at 01:05:26PM +0000, Will Deacon wrote:
> > On Tue, Feb 04, 2025 at 10:48:55AM -0700, Nathan Chancellor wrote:
> > > A recent LLVM commit [1] started generating an .ARM.attributes section
> > > similar to the one that exists for 32-bit, which results in orphan
> > > section warnings (or errors if CONFIG_WERROR is enabled) from the linker
> > > because it is not handled in the arm64 linker scripts.
> > > 
> > >   ld.lld: error: arch/arm64/kernel/vdso/vgettimeofday.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> > >   ld.lld: error: arch/arm64/kernel/vdso/vgetrandom.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> > > 
> > >   ld.lld: error: vmlinux.a(lib/vsprintf.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > >   ld.lld: error: vmlinux.a(lib/win_minmax.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > >   ld.lld: error: vmlinux.a(lib/xarray.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > > 
> > > Discard the new sections in the necessary linker scripts to resolve the
> > > warnings, as the kernel and vDSO do not need to retain it, similar to
> > > the .note.gnu.property section.
> > > 
> > > Cc: stable@vger.kernel.org
> > > Fixes: b3e5d80d0c48 ("arm64/build: Warn on orphan section placement")
> > > Link: https://github.com/llvm/llvm-project/commit/ee99c4d4845db66c4daa2373352133f4b237c942 [1]
> > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> > > ---
> > > Changes in v2:
> > > - Discard the section instead of adding it to the final artifacts to
> > >   mirror the .note.gnu.property section handling (Will).
> > 
> > Thanks for the v2. Just a minor nit:
> > 
> > > - Link to v1: https://lore.kernel.org/r/20250124-arm64-handle-arm-attributes-in-linker-script-v1-1-74135b6cf349@kernel.org
> > > ---
> > >  arch/arm64/kernel/vdso/vdso.lds.S | 1 +
> > >  arch/arm64/kernel/vmlinux.lds.S   | 1 +
> > >  2 files changed, 2 insertions(+)
> > > 
> > > diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> > > index 4ec32e86a8da..8095fef66209 100644
> > > --- a/arch/arm64/kernel/vdso/vdso.lds.S
> > > +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> > > @@ -80,6 +80,7 @@ SECTIONS
> > >  		*(.data .data.* .gnu.linkonce.d.* .sdata*)
> > >  		*(.bss .sbss .dynbss .dynsbss)
> > >  		*(.eh_frame .eh_frame_hdr)
> > > +		*(.ARM.attributes)
> > >  	}
> > 
> > Can we chuck this in the earlier /DISCARD/ section along with
> > .note.gnu.property? i.e.
> 
> Sure, I don't see why not. Do you want the comment above it updated to
> mention this section or should I leave it as is?

If you can think of something useful to add to the comment, don't let me
stop you!

Will
Nathan Chancellor Feb. 6, 2025, 4:54 p.m. UTC | #4
On Thu, Feb 06, 2025 at 03:22:47PM +0000, Will Deacon wrote:
> On Thu, Feb 06, 2025 at 06:57:15AM -0700, Nathan Chancellor wrote:
> > Hi Will,
> > 
> > On Thu, Feb 06, 2025 at 01:05:26PM +0000, Will Deacon wrote:
> > > On Tue, Feb 04, 2025 at 10:48:55AM -0700, Nathan Chancellor wrote:
> > > > A recent LLVM commit [1] started generating an .ARM.attributes section
> > > > similar to the one that exists for 32-bit, which results in orphan
> > > > section warnings (or errors if CONFIG_WERROR is enabled) from the linker
> > > > because it is not handled in the arm64 linker scripts.
> > > > 
> > > >   ld.lld: error: arch/arm64/kernel/vdso/vgettimeofday.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> > > >   ld.lld: error: arch/arm64/kernel/vdso/vgetrandom.o:(.ARM.attributes) is being placed in '.ARM.attributes'
> > > > 
> > > >   ld.lld: error: vmlinux.a(lib/vsprintf.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > > >   ld.lld: error: vmlinux.a(lib/win_minmax.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > > >   ld.lld: error: vmlinux.a(lib/xarray.o):(.ARM.attributes) is being placed in '.ARM.attributes'
> > > > 
> > > > Discard the new sections in the necessary linker scripts to resolve the
> > > > warnings, as the kernel and vDSO do not need to retain it, similar to
> > > > the .note.gnu.property section.
> > > > 
> > > > Cc: stable@vger.kernel.org
> > > > Fixes: b3e5d80d0c48 ("arm64/build: Warn on orphan section placement")
> > > > Link: https://github.com/llvm/llvm-project/commit/ee99c4d4845db66c4daa2373352133f4b237c942 [1]
> > > > Signed-off-by: Nathan Chancellor <nathan@kernel.org>
> > > > ---
> > > > Changes in v2:
> > > > - Discard the section instead of adding it to the final artifacts to
> > > >   mirror the .note.gnu.property section handling (Will).
> > > 
> > > Thanks for the v2. Just a minor nit:
> > > 
> > > > - Link to v1: https://lore.kernel.org/r/20250124-arm64-handle-arm-attributes-in-linker-script-v1-1-74135b6cf349@kernel.org
> > > > ---
> > > >  arch/arm64/kernel/vdso/vdso.lds.S | 1 +
> > > >  arch/arm64/kernel/vmlinux.lds.S   | 1 +
> > > >  2 files changed, 2 insertions(+)
> > > > 
> > > > diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> > > > index 4ec32e86a8da..8095fef66209 100644
> > > > --- a/arch/arm64/kernel/vdso/vdso.lds.S
> > > > +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> > > > @@ -80,6 +80,7 @@ SECTIONS
> > > >  		*(.data .data.* .gnu.linkonce.d.* .sdata*)
> > > >  		*(.bss .sbss .dynbss .dynsbss)
> > > >  		*(.eh_frame .eh_frame_hdr)
> > > > +		*(.ARM.attributes)
> > > >  	}
> > > 
> > > Can we chuck this in the earlier /DISCARD/ section along with
> > > .note.gnu.property? i.e.
> > 
> > Sure, I don't see why not. Do you want the comment above it updated to
> > mention this section or should I leave it as is?
> 
> If you can think of something useful to add to the comment, don't let me
> stop you!

Eh, I could not come up with much so I will leave it as is. v3 incoming
shortly.

Cheers,
Nathan
diff mbox series

Patch

diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
index 4ec32e86a8da..8095fef66209 100644
--- a/arch/arm64/kernel/vdso/vdso.lds.S
+++ b/arch/arm64/kernel/vdso/vdso.lds.S
@@ -80,6 +80,7 @@  SECTIONS
 		*(.data .data.* .gnu.linkonce.d.* .sdata*)
 		*(.bss .sbss .dynbss .dynsbss)
 		*(.eh_frame .eh_frame_hdr)
+		*(.ARM.attributes)
 	}
 }
 
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
index f84c71f04d9e..e73326bd3ff7 100644
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -162,6 +162,7 @@  SECTIONS
 	/DISCARD/ : {
 		*(.interp .dynamic)
 		*(.dynsym .dynstr .hash .gnu.hash)
+		*(.ARM.attributes)
 	}
 
 	. = KIMAGE_VADDR;