* [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.