From 145e9a0d274e19bac88646873945c801e068cc96 Mon Sep 17 00:00:00 2001 From: Lei Wen Date: Fri, 26 Sep 2025 20:17:15 +0800 Subject: [PATCH] [arch] fix link script not include global array init Using wild match init_array* to include global array init ctor Before: 10 .ctors 00000040 ffff0000001e6b80 00000000401e6b80 DATA 11 .dtors 00000000 ffff0000001e6bc0 00000000401e6bc0 DATA 12 .got 00000060 ffff0000001e6bc0 00000000401e6bc0 DATA 13 .init_array.1 00000470 ffff0000001e6c20 00000000401e6c20 14 .fini_array.1 00000470 ffff0000001e7090 00000000401e7090 15 .dummy_post_data 00000000 ffff0000001e7500 00000000401e7500 DATA 16 .bss 00009460 ffff0000001e8000 00000000401e8000 BSS After: 10 .ctors 000004b0 ffff0000001e6b80 00000000401e6b80 DATA 11 .dtors 00000470 ffff0000001e7030 00000000401e7030 12 .got 00000060 ffff0000001e74a0 00000000401e74a0 DATA 13 .dummy_post_data 00000000 ffff0000001e7500 00000000401e7500 DATA 14 .bss 00009460 ffff0000001e8000 00000000401e8000 BSS Signed-off-by: Lei Wen --- arch/arm/system-onesegment.ld | 4 ++-- arch/arm/system-twosegment.ld | 4 ++-- arch/arm64/system-onesegment.ld | 4 ++-- arch/m68k/linker.ld | 4 ++-- arch/microblaze/linker.ld | 4 ++-- arch/mips/linker.ld | 4 ++-- arch/or1k/linker.ld | 4 ++-- arch/riscv/linker-onesegment.ld | 4 ++-- arch/riscv/linker-twosegment.ld | 4 ++-- arch/x86/32/kernel.ld | 4 ++-- arch/x86/64/kernel.ld | 4 ++-- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/arch/arm/system-onesegment.ld b/arch/arm/system-onesegment.ld index 841af9c5..3c453dfe 100644 --- a/arch/arm/system-onesegment.ld +++ b/arch/arm/system-onesegment.ld @@ -76,12 +76,12 @@ SECTIONS .ctors : ALIGN(4) { __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; } .dtors : ALIGN(4) { __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; } .got : { *(.got.plt) *(.got) } diff --git a/arch/arm/system-twosegment.ld b/arch/arm/system-twosegment.ld index 62773dd6..bf9bcfc7 100644 --- a/arch/arm/system-twosegment.ld +++ b/arch/arm/system-twosegment.ld @@ -84,12 +84,12 @@ SECTIONS } .ctors : ALIGN(4) { __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; } .dtors : ALIGN(4) { __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; } .got : { *(.got.plt) *(.got) } diff --git a/arch/arm64/system-onesegment.ld b/arch/arm64/system-onesegment.ld index 0ccf092c..75e40730 100644 --- a/arch/arm64/system-onesegment.ld +++ b/arch/arm64/system-onesegment.ld @@ -78,12 +78,12 @@ SECTIONS .ctors : ALIGN(8) { __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; } .dtors : ALIGN(8) { __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; } .got : { *(.got.plt) *(.got) } diff --git a/arch/m68k/linker.ld b/arch/m68k/linker.ld index 39cea572..ccd83dc1 100644 --- a/arch/m68k/linker.ld +++ b/arch/m68k/linker.ld @@ -40,10 +40,10 @@ SECTIONS __data_start = .; *(.data .data.* .gnu.linkonce.d.*) __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; *(.got*) *(.dynamic) diff --git a/arch/microblaze/linker.ld b/arch/microblaze/linker.ld index d6c984b2..c0762798 100644 --- a/arch/microblaze/linker.ld +++ b/arch/microblaze/linker.ld @@ -72,10 +72,10 @@ SECTIONS __data_start = .; *(.data .data.* .gnu.linkonce.d.*) __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; *(.got*) *(.dynamic) diff --git a/arch/mips/linker.ld b/arch/mips/linker.ld index b874ca0b..d3b398a5 100644 --- a/arch/mips/linker.ld +++ b/arch/mips/linker.ld @@ -74,10 +74,10 @@ SECTIONS __data_start = .; *(.data .data.* .gnu.linkonce.d.*) __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; *(.got*) *(.dynamic) diff --git a/arch/or1k/linker.ld b/arch/or1k/linker.ld index 397a948d..38afa001 100644 --- a/arch/or1k/linker.ld +++ b/arch/or1k/linker.ld @@ -62,10 +62,10 @@ SECTIONS __data_start = .; *(.data .data.* .gnu.linkonce.d.*) __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; *(.got*) *(.dynamic) diff --git a/arch/riscv/linker-onesegment.ld b/arch/riscv/linker-onesegment.ld index 96106fdf..40c4534f 100644 --- a/arch/riscv/linker-onesegment.ld +++ b/arch/riscv/linker-onesegment.ld @@ -44,10 +44,10 @@ SECTIONS __data_start = .; *(.data .data.* .gnu.linkonce.d.*) __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; *(.got*) *(.dynamic) diff --git a/arch/riscv/linker-twosegment.ld b/arch/riscv/linker-twosegment.ld index 57e902a4..10238d2d 100644 --- a/arch/riscv/linker-twosegment.ld +++ b/arch/riscv/linker-twosegment.ld @@ -56,10 +56,10 @@ SECTIONS __data_start = .; *(.data .data.* .gnu.linkonce.d.*) __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; *(.got*) *(.dynamic) diff --git a/arch/x86/32/kernel.ld b/arch/x86/32/kernel.ld index 00471f74..22aacf75 100644 --- a/arch/x86/32/kernel.ld +++ b/arch/x86/32/kernel.ld @@ -59,12 +59,12 @@ SECTIONS .ctors : ALIGN(4) { __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; } .dtors : ALIGN(4) { __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; } diff --git a/arch/x86/64/kernel.ld b/arch/x86/64/kernel.ld index f06d1a3d..7f36c72e 100644 --- a/arch/x86/64/kernel.ld +++ b/arch/x86/64/kernel.ld @@ -59,12 +59,12 @@ SECTIONS .ctors : ALIGN(4) { __ctor_list = .; - KEEP(*(.ctors .init_array)) + KEEP(*(.ctors .init_array*)) __ctor_end = .; } .dtors : ALIGN(4) { __dtor_list = .; - KEEP(*(.dtors .fini_array)) + KEEP(*(.dtors .fini_array*)) __dtor_end = .; }