All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/2] vDSO linkerscript follow up
@ 2022-06-28 15:13 Joey Gouly
  2022-06-28 15:13 ` [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections Joey Gouly
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Joey Gouly @ 2022-06-28 15:13 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: nd, Joey Gouly

Hi all,

This is a follow up to the vDSO linker script fixes, that was pulled into the
arm64 tree.

Patch 1 fixes the issue found by Will:
  https://lore.kernel.org/linux-arm-kernel/20220623175352.GA17471@willie-the-truck/
Patch 2 fixes the comments Vincenzo had:
  https://lore.kernel.org/linux-arm-kernel/00abb0c5-6360-0004-353f-e7a88b3bd22c@arm.com/o

This is based on for-next/vdso: 2d304afaedc4 ("arm64: compat: Move kuser32.S to .rodata section")

Thanks,
Joey

Joey Gouly (2):
  arm64: vdso32: add ARM.exidx* sections
  arm64: vdso*: place got/plt sections in .rodata

 arch/arm64/kernel/vdso/vdso.lds.S   | 12 +++++-------
 arch/arm64/kernel/vdso32/vdso.lds.S | 24 +++++++++++-------------
 2 files changed, 16 insertions(+), 20 deletions(-)

-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections
  2022-06-28 15:13 [PATCH v1 0/2] vDSO linkerscript follow up Joey Gouly
@ 2022-06-28 15:13 ` Joey Gouly
  2022-06-29  9:56   ` Vincenzo Frascino
  2022-06-29 20:10     ` Nathan Chancellor
  2022-06-28 15:13 ` [PATCH v1 2/2] arm64: vdso*: place got/plt sections in .rodata Joey Gouly
  2022-06-28 17:02 ` [PATCH v1 0/2] vDSO linkerscript follow up Will Deacon
  2 siblings, 2 replies; 10+ messages in thread
From: Joey Gouly @ 2022-06-28 15:13 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: nd, Joey Gouly, Will Deacon, Vincenzo Frascino

These show up when building with clang+lld.

Signed-off-by: Joey Gouly <joey.gouly@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/kernel/vdso32/vdso.lds.S | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
index 120cf422036f..e2f8ced571d6 100644
--- a/arch/arm64/kernel/vdso32/vdso.lds.S
+++ b/arch/arm64/kernel/vdso32/vdso.lds.S
@@ -60,6 +60,7 @@ SECTIONS
 	}
 
 	ELF_DETAILS
+	.ARM.exidx : { *(.ARM.exidx*) }
 	.ARM.attributes 0 : { *(.ARM.attributes) }
 
 	/DISCARD/	: {
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v1 2/2] arm64: vdso*: place got/plt sections in .rodata
  2022-06-28 15:13 [PATCH v1 0/2] vDSO linkerscript follow up Joey Gouly
  2022-06-28 15:13 ` [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections Joey Gouly
@ 2022-06-28 15:13 ` Joey Gouly
  2022-06-29 10:11   ` Vincenzo Frascino
  2022-06-28 17:02 ` [PATCH v1 0/2] vDSO linkerscript follow up Will Deacon
  2 siblings, 1 reply; 10+ messages in thread
From: Joey Gouly @ 2022-06-28 15:13 UTC (permalink / raw)
  To: linux-arm-kernel; +Cc: nd, Joey Gouly, Will Deacon, Vincenzo Frascino

The vDSO will not contain absolute relocations, so place these
sections in .rodata.

Signed-off-by: Joey Gouly <joey.gouly@arm.com>
Link: https://lore.kernel.org/linux-arm-kernel/00abb0c5-6360-0004-353f-e7a88b3bd22c@arm.com/
Cc: Will Deacon <will@kernel.org>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
---
 arch/arm64/kernel/vdso/vdso.lds.S   | 12 +++++-------
 arch/arm64/kernel/vdso32/vdso.lds.S | 23 ++++++++++-------------
 2 files changed, 15 insertions(+), 20 deletions(-)

diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
index 1cd85258c079..e69fb4aaaf3e 100644
--- a/arch/arm64/kernel/vdso/vdso.lds.S
+++ b/arch/arm64/kernel/vdso/vdso.lds.S
@@ -52,17 +52,15 @@ SECTIONS
 
 	.rela.dyn	: ALIGN(8) { *(.rela .rela*) }
 
-	.plt		: {
+	.rodata		: {
+		*(.rodata*)
+		*(.got)
+		*(.got.plt)
 		*(.plt)
 		*(.plt.*)
 		*(.iplt)
 		*(.igot .igot.plt)
-	}
-
-	.got		: { *(.got) }
-	.got.plt	: { *(.got.plt) }
-
-	.rodata		: { *(.rodata*) }		:text
+	}						:text
 
 	_end = .;
 	PROVIDE(end = .);
diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
index e2f8ced571d6..6e67a6524d58 100644
--- a/arch/arm64/kernel/vdso32/vdso.lds.S
+++ b/arch/arm64/kernel/vdso32/vdso.lds.S
@@ -36,7 +36,15 @@ SECTIONS
 
 	.dynamic	: { *(.dynamic) }		:text	:dynamic
 
-	.rodata		: { *(.rodata*) }		:text
+	.rodata		: {
+		*(.rodata*)
+		*(.got)
+		*(.got.plt)
+		*(.plt)
+		*(.rel.iplt)
+		*(.iplt)
+		*(.igot.plt)
+	}						:text
 
 	.text		: {
 		*(.text*)
@@ -46,18 +54,7 @@ SECTIONS
 		*(.v4_bx)
 	}						:text	=0xe7f001f2
 
-	.rel.dyn	: { *(.rel.text) }
-
-	.got		: { *(.got) }
-	.rel.got	: { *(.rel.got) }
-	.got.plt	: { *(.got.plt) }
-	.rel.plt	: { *(.rel.plt) }
-	.plt		: {
-		*(.plt)
-		*(.rel.iplt)
-		*(.iplt)
-		*(.igot.plt)
-	}
+	.rel.dyn	: { *(.rel*) }
 
 	ELF_DETAILS
 	.ARM.exidx : { *(.ARM.exidx*) }
-- 
2.17.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 0/2] vDSO linkerscript follow up
  2022-06-28 15:13 [PATCH v1 0/2] vDSO linkerscript follow up Joey Gouly
  2022-06-28 15:13 ` [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections Joey Gouly
  2022-06-28 15:13 ` [PATCH v1 2/2] arm64: vdso*: place got/plt sections in .rodata Joey Gouly
@ 2022-06-28 17:02 ` Will Deacon
  2 siblings, 0 replies; 10+ messages in thread
From: Will Deacon @ 2022-06-28 17:02 UTC (permalink / raw)
  To: linux-arm-kernel, Joey Gouly
  Cc: catalin.marinas, kernel-team, Will Deacon, nd

On Tue, 28 Jun 2022 16:13:05 +0100, Joey Gouly wrote:
> This is a follow up to the vDSO linker script fixes, that was pulled into the
> arm64 tree.
> 
> Patch 1 fixes the issue found by Will:
>   https://lore.kernel.org/linux-arm-kernel/20220623175352.GA17471@willie-the-truck/
> Patch 2 fixes the comments Vincenzo had:
>   https://lore.kernel.org/linux-arm-kernel/00abb0c5-6360-0004-353f-e7a88b3bd22c@arm.com/o
> 
> [...]

Applied to arm64 (for-next/vdso), thanks!

[1/2] arm64: vdso32: add ARM.exidx* sections
      https://git.kernel.org/arm64/c/5c4fb60816ea
[2/2] arm64: vdso*: place got/plt sections in .rodata
      https://git.kernel.org/arm64/c/4274929c7ee6

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections
  2022-06-28 15:13 ` [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections Joey Gouly
@ 2022-06-29  9:56   ` Vincenzo Frascino
  2022-06-29 20:10     ` Nathan Chancellor
  1 sibling, 0 replies; 10+ messages in thread
From: Vincenzo Frascino @ 2022-06-29  9:56 UTC (permalink / raw)
  To: Joey Gouly, linux-arm-kernel; +Cc: nd, Will Deacon

On 28/06/2022 16:13, Joey Gouly wrote:
> These show up when building with clang+lld.
> 
> Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>

Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>

> ---
>   arch/arm64/kernel/vdso32/vdso.lds.S | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> index 120cf422036f..e2f8ced571d6 100644
> --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> @@ -60,6 +60,7 @@ SECTIONS
>   	}
>   
>   	ELF_DETAILS
> +	.ARM.exidx : { *(.ARM.exidx*) }
>   	.ARM.attributes 0 : { *(.ARM.attributes) }
>   
>   	/DISCARD/	: {

-- 
Regards,
Vincenzo

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 2/2] arm64: vdso*: place got/plt sections in .rodata
  2022-06-28 15:13 ` [PATCH v1 2/2] arm64: vdso*: place got/plt sections in .rodata Joey Gouly
@ 2022-06-29 10:11   ` Vincenzo Frascino
  0 siblings, 0 replies; 10+ messages in thread
From: Vincenzo Frascino @ 2022-06-29 10:11 UTC (permalink / raw)
  To: Joey Gouly, linux-arm-kernel; +Cc: nd, Will Deacon



On 28/06/2022 16:13, Joey Gouly wrote:
> The vDSO will not contain absolute relocations, so place these
> sections in .rodata.
> 
> Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> Link: https://lore.kernel.org/linux-arm-kernel/00abb0c5-6360-0004-353f-e7a88b3bd22c@arm.com/
> Cc: Will Deacon <will@kernel.org>
> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>

Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>

> ---
>   arch/arm64/kernel/vdso/vdso.lds.S   | 12 +++++-------
>   arch/arm64/kernel/vdso32/vdso.lds.S | 23 ++++++++++-------------
>   2 files changed, 15 insertions(+), 20 deletions(-)
> 
> diff --git a/arch/arm64/kernel/vdso/vdso.lds.S b/arch/arm64/kernel/vdso/vdso.lds.S
> index 1cd85258c079..e69fb4aaaf3e 100644
> --- a/arch/arm64/kernel/vdso/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso/vdso.lds.S
> @@ -52,17 +52,15 @@ SECTIONS
>   
>   	.rela.dyn	: ALIGN(8) { *(.rela .rela*) }
>   
> -	.plt		: {
> +	.rodata		: {
> +		*(.rodata*)
> +		*(.got)
> +		*(.got.plt)
>   		*(.plt)
>   		*(.plt.*)
>   		*(.iplt)
>   		*(.igot .igot.plt)
> -	}
> -
> -	.got		: { *(.got) }
> -	.got.plt	: { *(.got.plt) }
> -
> -	.rodata		: { *(.rodata*) }		:text
> +	}						:text
>   
>   	_end = .;
>   	PROVIDE(end = .);
> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> index e2f8ced571d6..6e67a6524d58 100644
> --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> @@ -36,7 +36,15 @@ SECTIONS
>   
>   	.dynamic	: { *(.dynamic) }		:text	:dynamic
>   
> -	.rodata		: { *(.rodata*) }		:text
> +	.rodata		: {
> +		*(.rodata*)
> +		*(.got)
> +		*(.got.plt)
> +		*(.plt)
> +		*(.rel.iplt)
> +		*(.iplt)
> +		*(.igot.plt)
> +	}						:text
>   
>   	.text		: {
>   		*(.text*)
> @@ -46,18 +54,7 @@ SECTIONS
>   		*(.v4_bx)
>   	}						:text	=0xe7f001f2
>   
> -	.rel.dyn	: { *(.rel.text) }
> -
> -	.got		: { *(.got) }
> -	.rel.got	: { *(.rel.got) }
> -	.got.plt	: { *(.got.plt) }
> -	.rel.plt	: { *(.rel.plt) }
> -	.plt		: {
> -		*(.plt)
> -		*(.rel.iplt)
> -		*(.iplt)
> -		*(.igot.plt)
> -	}
> +	.rel.dyn	: { *(.rel*) }
>   
>   	ELF_DETAILS
>   	.ARM.exidx : { *(.ARM.exidx*) }

-- 
Regards,
Vincenzo

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections
  2022-06-28 15:13 ` [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections Joey Gouly
@ 2022-06-29 20:10     ` Nathan Chancellor
  2022-06-29 20:10     ` Nathan Chancellor
  1 sibling, 0 replies; 10+ messages in thread
From: Nathan Chancellor @ 2022-06-29 20:10 UTC (permalink / raw)
  To: Joey Gouly; +Cc: linux-arm-kernel, nd, Will Deacon, Vincenzo Frascino, llvm

Hi Joey,

On Tue, Jun 28, 2022 at 04:13:06PM +0100, Joey Gouly wrote:
> These show up when building with clang+lld.
> 
> Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
> ---
>  arch/arm64/kernel/vdso32/vdso.lds.S | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> index 120cf422036f..e2f8ced571d6 100644
> --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> @@ -60,6 +60,7 @@ SECTIONS
>  	}
>  
>  	ELF_DETAILS
> +	.ARM.exidx : { *(.ARM.exidx*) }
>  	.ARM.attributes 0 : { *(.ARM.attributes) }
>  
>  	/DISCARD/	: {
> -- 
> 2.17.1
> 

This patch is now in -next as commit 5c4fb60816ea ("arm64: vdso32: add
ARM.exidx* sections"), which causes the following errors with ld.lld 11:

  ld.lld: error: could not allocate headers
  ld.lld: error: unable to place section .text at file offset [0x2A0, 0xBB1]; check your linker script for overflows
  ld.lld: error: unable to place section .comment at file offset [0xBB2, 0xC8A]; check your linker script for overflows
  ld.lld: error: unable to place section .symtab at file offset [0xC8C, 0xE0B]; check your linker script for overflows
  ld.lld: error: unable to place section .strtab at file offset [0xE0C, 0xF1C]; check your linker script for overflows
  ld.lld: error: unable to place section .shstrtab at file offset [0xF1D, 0xFAA]; check your linker script for overflows
  ld.lld: error: section .ARM.exidx file range overlaps with .hash
  >>> .ARM.exidx range is [0x90, 0xCF]
  >>> .hash range is [0xB4, 0xE3]

  ld.lld: error: section .hash file range overlaps with .ARM.attributes
  >>> .hash range is [0xB4, 0xE3]
  >>> .ARM.attributes range is [0xD0, 0x10B]

  ld.lld: error: section .ARM.attributes file range overlaps with .dynsym
  >>> .ARM.attributes range is [0xD0, 0x10B]
  >>> .dynsym range is [0xE4, 0x133]

  ld.lld: error: section .ARM.exidx virtual address range overlaps with .hash
  >>> .ARM.exidx range is [0x90, 0xCF]
  >>> .hash range is [0xB4, 0xE3]

  ld.lld: error: section .ARM.exidx load address range overlaps with .hash
  >>> .ARM.exidx range is [0x90, 0xCF]
  >>> .hash range is [0xB4, 0xE3]

I bisected LLVM to see what fixed this in ld.lld 12 and I landed on
commit ec29538af2e0 ("[ELF] Assign file offsets of non-SHF_ALLOC after
SHF_ALLOC and set sh_addr=0 to non-SHF_ALLOC") [1].

We could bump the minimum version of LLVM to 12 over this but the
following diff appears to resolve it for me, although I am not sure as
to why.

diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
index 6e67a6524d58..c25bed8e6df1 100644
--- a/arch/arm64/kernel/vdso32/vdso.lds.S
+++ b/arch/arm64/kernel/vdso32/vdso.lds.S
@@ -56,8 +56,8 @@ SECTIONS
 
 	.rel.dyn	: { *(.rel*) }
 
-	ELF_DETAILS
 	.ARM.exidx : { *(.ARM.exidx*) }
+	ELF_DETAILS
 	.ARM.attributes 0 : { *(.ARM.attributes) }
 
 	/DISCARD/	: {

I just noticed that the .ARM.exidx section (ARM_UNWIND_SECTIONS)
is placed before the sections the error mentions (ARM_DETAILS) in
arch/arm/kernel/vmlinux.lds.S, where we do not see any errors with LLVM
11. Looking at the section headers, it seems like it should be okay?

With LLVM 15 (current git) at 4274929c7ee6f442:

  arch/arm64/kernel/vdso32/vdso.so:        file format elf32-littlearm

  Sections:
  Idx Name            Size     VMA      Type
    0                 00000000 00000000
    1 .hash           00000030 000000b4
    2 .dynsym         00000050 000000e4
    3 .dynstr         0000006f 00000134
    4 .gnu.version    0000000a 000001a4
    5 .gnu.version_d  00000038 000001b0
    6 .note           00000054 000001e8
    7 .dynamic        00000058 0000023c
    8 .text           0000092a 00000294 TEXT
    9 .shstrtab       0000006d 00000000
   10 .ARM.exidx      00000040 00000bc0
   11 .ARM.attributes 0000003c 00000000

With LLVM 11 at 4274929c7ee6f442 + above diff:

  arch/arm64/kernel/vdso32/vdso.so:        file format elf32-littlearm

  Sections:
  Idx Name            Size     VMA      Type
    0                 00000000 00000000
    1 .hash           00000030 000000b4
    2 .dynsym         00000050 000000e4
    3 .dynstr         0000006f 00000134
    4 .gnu.version    0000000a 000001a4
    5 .gnu.version_d  00000038 000001b0
    6 .note           00000054 000001e8
    7 .dynamic        00000058 0000023c
    8 .rodata         00000000 000002a0 TEXT
    9 .text           00000912 000002a0 TEXT
   10 .ARM.exidx      00000040 00000bb4
   11 .shstrtab       00000075 00000000
   12 .ARM.attributes 0000003c 00000000

With LLVM 15 at 4274929c7ee6f442 + above diff:

  arch/arm64/kernel/vdso32/vdso.so:        file format elf32-littlearm

  Sections:
  Idx Name            Size     VMA      Type
    0                 00000000 00000000
    1 .hash           00000030 000000b4
    2 .dynsym         00000050 000000e4
    3 .dynstr         0000006f 00000134
    4 .gnu.version    0000000a 000001a4
    5 .gnu.version_d  00000038 000001b0
    6 .note           00000054 000001e8
    7 .dynamic        00000058 0000023c
    8 .rodata         00000000 000002a0 TEXT
    9 .text           00000912 000002a0 TEXT
   10 .ARM.exidx      00000040 00000bb4
   11 .shstrtab       00000075 00000000
   12 .ARM.attributes 0000003c 00000000

[1]: https://github.com/llvm/llvm-project/commit/ec29538af2e0886a65f479d6a533956a1c478132

Cheers,
Nathan

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections
@ 2022-06-29 20:10     ` Nathan Chancellor
  0 siblings, 0 replies; 10+ messages in thread
From: Nathan Chancellor @ 2022-06-29 20:10 UTC (permalink / raw)
  To: Joey Gouly; +Cc: linux-arm-kernel, nd, Will Deacon, Vincenzo Frascino, llvm

Hi Joey,

On Tue, Jun 28, 2022 at 04:13:06PM +0100, Joey Gouly wrote:
> These show up when building with clang+lld.
> 
> Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
> ---
>  arch/arm64/kernel/vdso32/vdso.lds.S | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> index 120cf422036f..e2f8ced571d6 100644
> --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> @@ -60,6 +60,7 @@ SECTIONS
>  	}
>  
>  	ELF_DETAILS
> +	.ARM.exidx : { *(.ARM.exidx*) }
>  	.ARM.attributes 0 : { *(.ARM.attributes) }
>  
>  	/DISCARD/	: {
> -- 
> 2.17.1
> 

This patch is now in -next as commit 5c4fb60816ea ("arm64: vdso32: add
ARM.exidx* sections"), which causes the following errors with ld.lld 11:

  ld.lld: error: could not allocate headers
  ld.lld: error: unable to place section .text at file offset [0x2A0, 0xBB1]; check your linker script for overflows
  ld.lld: error: unable to place section .comment at file offset [0xBB2, 0xC8A]; check your linker script for overflows
  ld.lld: error: unable to place section .symtab at file offset [0xC8C, 0xE0B]; check your linker script for overflows
  ld.lld: error: unable to place section .strtab at file offset [0xE0C, 0xF1C]; check your linker script for overflows
  ld.lld: error: unable to place section .shstrtab at file offset [0xF1D, 0xFAA]; check your linker script for overflows
  ld.lld: error: section .ARM.exidx file range overlaps with .hash
  >>> .ARM.exidx range is [0x90, 0xCF]
  >>> .hash range is [0xB4, 0xE3]

  ld.lld: error: section .hash file range overlaps with .ARM.attributes
  >>> .hash range is [0xB4, 0xE3]
  >>> .ARM.attributes range is [0xD0, 0x10B]

  ld.lld: error: section .ARM.attributes file range overlaps with .dynsym
  >>> .ARM.attributes range is [0xD0, 0x10B]
  >>> .dynsym range is [0xE4, 0x133]

  ld.lld: error: section .ARM.exidx virtual address range overlaps with .hash
  >>> .ARM.exidx range is [0x90, 0xCF]
  >>> .hash range is [0xB4, 0xE3]

  ld.lld: error: section .ARM.exidx load address range overlaps with .hash
  >>> .ARM.exidx range is [0x90, 0xCF]
  >>> .hash range is [0xB4, 0xE3]

I bisected LLVM to see what fixed this in ld.lld 12 and I landed on
commit ec29538af2e0 ("[ELF] Assign file offsets of non-SHF_ALLOC after
SHF_ALLOC and set sh_addr=0 to non-SHF_ALLOC") [1].

We could bump the minimum version of LLVM to 12 over this but the
following diff appears to resolve it for me, although I am not sure as
to why.

diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
index 6e67a6524d58..c25bed8e6df1 100644
--- a/arch/arm64/kernel/vdso32/vdso.lds.S
+++ b/arch/arm64/kernel/vdso32/vdso.lds.S
@@ -56,8 +56,8 @@ SECTIONS
 
 	.rel.dyn	: { *(.rel*) }
 
-	ELF_DETAILS
 	.ARM.exidx : { *(.ARM.exidx*) }
+	ELF_DETAILS
 	.ARM.attributes 0 : { *(.ARM.attributes) }
 
 	/DISCARD/	: {

I just noticed that the .ARM.exidx section (ARM_UNWIND_SECTIONS)
is placed before the sections the error mentions (ARM_DETAILS) in
arch/arm/kernel/vmlinux.lds.S, where we do not see any errors with LLVM
11. Looking at the section headers, it seems like it should be okay?

With LLVM 15 (current git) at 4274929c7ee6f442:

  arch/arm64/kernel/vdso32/vdso.so:        file format elf32-littlearm

  Sections:
  Idx Name            Size     VMA      Type
    0                 00000000 00000000
    1 .hash           00000030 000000b4
    2 .dynsym         00000050 000000e4
    3 .dynstr         0000006f 00000134
    4 .gnu.version    0000000a 000001a4
    5 .gnu.version_d  00000038 000001b0
    6 .note           00000054 000001e8
    7 .dynamic        00000058 0000023c
    8 .text           0000092a 00000294 TEXT
    9 .shstrtab       0000006d 00000000
   10 .ARM.exidx      00000040 00000bc0
   11 .ARM.attributes 0000003c 00000000

With LLVM 11 at 4274929c7ee6f442 + above diff:

  arch/arm64/kernel/vdso32/vdso.so:        file format elf32-littlearm

  Sections:
  Idx Name            Size     VMA      Type
    0                 00000000 00000000
    1 .hash           00000030 000000b4
    2 .dynsym         00000050 000000e4
    3 .dynstr         0000006f 00000134
    4 .gnu.version    0000000a 000001a4
    5 .gnu.version_d  00000038 000001b0
    6 .note           00000054 000001e8
    7 .dynamic        00000058 0000023c
    8 .rodata         00000000 000002a0 TEXT
    9 .text           00000912 000002a0 TEXT
   10 .ARM.exidx      00000040 00000bb4
   11 .shstrtab       00000075 00000000
   12 .ARM.attributes 0000003c 00000000

With LLVM 15 at 4274929c7ee6f442 + above diff:

  arch/arm64/kernel/vdso32/vdso.so:        file format elf32-littlearm

  Sections:
  Idx Name            Size     VMA      Type
    0                 00000000 00000000
    1 .hash           00000030 000000b4
    2 .dynsym         00000050 000000e4
    3 .dynstr         0000006f 00000134
    4 .gnu.version    0000000a 000001a4
    5 .gnu.version_d  00000038 000001b0
    6 .note           00000054 000001e8
    7 .dynamic        00000058 0000023c
    8 .rodata         00000000 000002a0 TEXT
    9 .text           00000912 000002a0 TEXT
   10 .ARM.exidx      00000040 00000bb4
   11 .shstrtab       00000075 00000000
   12 .ARM.attributes 0000003c 00000000

[1]: https://github.com/llvm/llvm-project/commit/ec29538af2e0886a65f479d6a533956a1c478132

Cheers,
Nathan

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections
  2022-06-29 20:10     ` Nathan Chancellor
@ 2022-06-30 10:21       ` Joey Gouly
  -1 siblings, 0 replies; 10+ messages in thread
From: Joey Gouly @ 2022-06-30 10:21 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-arm-kernel, nd, Will Deacon, Vincenzo Frascino, llvm

Hi Nathan,

On Wed, Jun 29, 2022 at 01:10:10PM -0700, Nathan Chancellor wrote:
> Hi Joey,
> 
> On Tue, Jun 28, 2022 at 04:13:06PM +0100, Joey Gouly wrote:
> > These show up when building with clang+lld.
> > 
> > Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> > Cc: Will Deacon <will@kernel.org>
> > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
> > ---
> >  arch/arm64/kernel/vdso32/vdso.lds.S | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> > index 120cf422036f..e2f8ced571d6 100644
> > --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> > +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> > @@ -60,6 +60,7 @@ SECTIONS
> >  	}
> >  
> >  	ELF_DETAILS
> > +	.ARM.exidx : { *(.ARM.exidx*) }
> >  	.ARM.attributes 0 : { *(.ARM.attributes) }
> >  
> >  	/DISCARD/	: {
> > -- 
> > 2.17.1
> > 
> 
> This patch is now in -next as commit 5c4fb60816ea ("arm64: vdso32: add
> ARM.exidx* sections"), which causes the following errors with ld.lld 11:

Sorry for the breakage.

> 
>   ld.lld: error: could not allocate headers
>   ld.lld: error: unable to place section .text at file offset [0x2A0, 0xBB1]; check your linker script for overflows
>   ld.lld: error: unable to place section .comment at file offset [0xBB2, 0xC8A]; check your linker script for overflows
>   ld.lld: error: unable to place section .symtab at file offset [0xC8C, 0xE0B]; check your linker script for overflows
>   ld.lld: error: unable to place section .strtab at file offset [0xE0C, 0xF1C]; check your linker script for overflows
>   ld.lld: error: unable to place section .shstrtab at file offset [0xF1D, 0xFAA]; check your linker script for overflows
>   ld.lld: error: section .ARM.exidx file range overlaps with .hash
>   >>> .ARM.exidx range is [0x90, 0xCF]
>   >>> .hash range is [0xB4, 0xE3]
> 
>   ld.lld: error: section .hash file range overlaps with .ARM.attributes
>   >>> .hash range is [0xB4, 0xE3]
>   >>> .ARM.attributes range is [0xD0, 0x10B]
> 
>   ld.lld: error: section .ARM.attributes file range overlaps with .dynsym
>   >>> .ARM.attributes range is [0xD0, 0x10B]
>   >>> .dynsym range is [0xE4, 0x133]
> 
>   ld.lld: error: section .ARM.exidx virtual address range overlaps with .hash
>   >>> .ARM.exidx range is [0x90, 0xCF]
>   >>> .hash range is [0xB4, 0xE3]
> 
>   ld.lld: error: section .ARM.exidx load address range overlaps with .hash
>   >>> .ARM.exidx range is [0x90, 0xCF]
>   >>> .hash range is [0xB4, 0xE3]
> 
> I bisected LLVM to see what fixed this in ld.lld 12 and I landed on
> commit ec29538af2e0 ("[ELF] Assign file offsets of non-SHF_ALLOC after
> SHF_ALLOC and set sh_addr=0 to non-SHF_ALLOC") [1].
> 
> We could bump the minimum version of LLVM to 12 over this but the
> following diff appears to resolve it for me, although I am not sure as
> to why.
> 
> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> index 6e67a6524d58..c25bed8e6df1 100644
> --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> @@ -56,8 +56,8 @@ SECTIONS
>  
>  	.rel.dyn	: { *(.rel*) }
>  
> -	ELF_DETAILS
>  	.ARM.exidx : { *(.ARM.exidx*) }
> +	ELF_DETAILS
>  	.ARM.attributes 0 : { *(.ARM.attributes) }
>  
>  	/DISCARD/	: {
> 
> I just noticed that the .ARM.exidx section (ARM_UNWIND_SECTIONS)
> is placed before the sections the error mentions (ARM_DETAILS) in
> arch/arm/kernel/vmlinux.lds.S, where we do not see any errors with LLVM
> 11. Looking at the section headers, it seems like it should be okay?

I think it's good like this too, will you send it out as a patch?

Thanks,
Joey

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections
@ 2022-06-30 10:21       ` Joey Gouly
  0 siblings, 0 replies; 10+ messages in thread
From: Joey Gouly @ 2022-06-30 10:21 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: linux-arm-kernel, nd, Will Deacon, Vincenzo Frascino, llvm

Hi Nathan,

On Wed, Jun 29, 2022 at 01:10:10PM -0700, Nathan Chancellor wrote:
> Hi Joey,
> 
> On Tue, Jun 28, 2022 at 04:13:06PM +0100, Joey Gouly wrote:
> > These show up when building with clang+lld.
> > 
> > Signed-off-by: Joey Gouly <joey.gouly@arm.com>
> > Cc: Will Deacon <will@kernel.org>
> > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
> > ---
> >  arch/arm64/kernel/vdso32/vdso.lds.S | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> > index 120cf422036f..e2f8ced571d6 100644
> > --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> > +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> > @@ -60,6 +60,7 @@ SECTIONS
> >  	}
> >  
> >  	ELF_DETAILS
> > +	.ARM.exidx : { *(.ARM.exidx*) }
> >  	.ARM.attributes 0 : { *(.ARM.attributes) }
> >  
> >  	/DISCARD/	: {
> > -- 
> > 2.17.1
> > 
> 
> This patch is now in -next as commit 5c4fb60816ea ("arm64: vdso32: add
> ARM.exidx* sections"), which causes the following errors with ld.lld 11:

Sorry for the breakage.

> 
>   ld.lld: error: could not allocate headers
>   ld.lld: error: unable to place section .text at file offset [0x2A0, 0xBB1]; check your linker script for overflows
>   ld.lld: error: unable to place section .comment at file offset [0xBB2, 0xC8A]; check your linker script for overflows
>   ld.lld: error: unable to place section .symtab at file offset [0xC8C, 0xE0B]; check your linker script for overflows
>   ld.lld: error: unable to place section .strtab at file offset [0xE0C, 0xF1C]; check your linker script for overflows
>   ld.lld: error: unable to place section .shstrtab at file offset [0xF1D, 0xFAA]; check your linker script for overflows
>   ld.lld: error: section .ARM.exidx file range overlaps with .hash
>   >>> .ARM.exidx range is [0x90, 0xCF]
>   >>> .hash range is [0xB4, 0xE3]
> 
>   ld.lld: error: section .hash file range overlaps with .ARM.attributes
>   >>> .hash range is [0xB4, 0xE3]
>   >>> .ARM.attributes range is [0xD0, 0x10B]
> 
>   ld.lld: error: section .ARM.attributes file range overlaps with .dynsym
>   >>> .ARM.attributes range is [0xD0, 0x10B]
>   >>> .dynsym range is [0xE4, 0x133]
> 
>   ld.lld: error: section .ARM.exidx virtual address range overlaps with .hash
>   >>> .ARM.exidx range is [0x90, 0xCF]
>   >>> .hash range is [0xB4, 0xE3]
> 
>   ld.lld: error: section .ARM.exidx load address range overlaps with .hash
>   >>> .ARM.exidx range is [0x90, 0xCF]
>   >>> .hash range is [0xB4, 0xE3]
> 
> I bisected LLVM to see what fixed this in ld.lld 12 and I landed on
> commit ec29538af2e0 ("[ELF] Assign file offsets of non-SHF_ALLOC after
> SHF_ALLOC and set sh_addr=0 to non-SHF_ALLOC") [1].
> 
> We could bump the minimum version of LLVM to 12 over this but the
> following diff appears to resolve it for me, although I am not sure as
> to why.
> 
> diff --git a/arch/arm64/kernel/vdso32/vdso.lds.S b/arch/arm64/kernel/vdso32/vdso.lds.S
> index 6e67a6524d58..c25bed8e6df1 100644
> --- a/arch/arm64/kernel/vdso32/vdso.lds.S
> +++ b/arch/arm64/kernel/vdso32/vdso.lds.S
> @@ -56,8 +56,8 @@ SECTIONS
>  
>  	.rel.dyn	: { *(.rel*) }
>  
> -	ELF_DETAILS
>  	.ARM.exidx : { *(.ARM.exidx*) }
> +	ELF_DETAILS
>  	.ARM.attributes 0 : { *(.ARM.attributes) }
>  
>  	/DISCARD/	: {
> 
> I just noticed that the .ARM.exidx section (ARM_UNWIND_SECTIONS)
> is placed before the sections the error mentions (ARM_DETAILS) in
> arch/arm/kernel/vmlinux.lds.S, where we do not see any errors with LLVM
> 11. Looking at the section headers, it seems like it should be okay?

I think it's good like this too, will you send it out as a patch?

Thanks,
Joey

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-06-30 10:22 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-28 15:13 [PATCH v1 0/2] vDSO linkerscript follow up Joey Gouly
2022-06-28 15:13 ` [PATCH v1 1/2] arm64: vdso32: add ARM.exidx* sections Joey Gouly
2022-06-29  9:56   ` Vincenzo Frascino
2022-06-29 20:10   ` Nathan Chancellor
2022-06-29 20:10     ` Nathan Chancellor
2022-06-30 10:21     ` Joey Gouly
2022-06-30 10:21       ` Joey Gouly
2022-06-28 15:13 ` [PATCH v1 2/2] arm64: vdso*: place got/plt sections in .rodata Joey Gouly
2022-06-29 10:11   ` Vincenzo Frascino
2022-06-28 17:02 ` [PATCH v1 0/2] vDSO linkerscript follow up Will Deacon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.