[PATCH] xen: Consolidate linker script setup data

Jason Andryuk posted 1 patch 1 day, 1 hour ago
xen/arch/arm/xen.lds.S    | 11 +----------
xen/arch/ppc/xen.lds.S    | 12 +-----------
xen/arch/riscv/xen.lds.S  | 12 +-----------
xen/arch/x86/xen.lds.S    | 11 +----------
xen/include/xen/xen.lds.h | 12 ++++++++++++
5 files changed, 16 insertions(+), 42 deletions(-)
[PATCH] xen: Consolidate linker script setup data
Posted by Jason Andryuk 1 day, 1 hour ago
.init.setup, .initcallpresmp.init, and .initcall1.init are duplicated
across architectures.  Replace them with a common define, SETUP_DATA.

Suggested-by: Grygorii Strashko <grygorii_strashko@epam.com>
Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
Reviewed-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
Alejandro reviewed internally.
Jan reviewed off list.
---
 xen/arch/arm/xen.lds.S    | 11 +----------
 xen/arch/ppc/xen.lds.S    | 12 +-----------
 xen/arch/riscv/xen.lds.S  | 12 +-----------
 xen/arch/x86/xen.lds.S    | 11 +----------
 xen/include/xen/xen.lds.h | 12 ++++++++++++
 5 files changed, 16 insertions(+), 42 deletions(-)

diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
index d4d9594033..32afbfe131 100644
--- a/xen/arch/arm/xen.lds.S
+++ b/xen/arch/arm/xen.lds.S
@@ -135,16 +135,7 @@ SECTIONS
        *(.init.rodata)
        *(.init.rodata.*)
 
-       . = ALIGN(POINTER_ALIGN);
-       __setup_start = .;
-       *(.init.setup)
-       __setup_end = .;
-
-       __initcall_start = .;
-       *(.initcallpresmp.init)
-       __presmp_initcall_end = .;
-       *(.initcall1.init)
-       __initcall_end = .;
+       SETUP_DATA
 
        . = ALIGN(4);
        __alt_instructions = .;
diff --git a/xen/arch/ppc/xen.lds.S b/xen/arch/ppc/xen.lds.S
index d0f2ed43f1..37256c8865 100644
--- a/xen/arch/ppc/xen.lds.S
+++ b/xen/arch/ppc/xen.lds.S
@@ -107,17 +107,7 @@ SECTIONS
         *(.init.rodata)
         *(.init.rodata.*)
 
-        . = ALIGN(POINTER_ALIGN);
-        __setup_start = .;
-        *(.init.setup)
-        __setup_end = .;
-
-        __initcall_start = .;
-        *(.initcallpresmp.init)
-        __presmp_initcall_end = .;
-        *(.initcall1.init)
-        __initcall_end = .;
-
+        SETUP_DATA
         LOCK_PROFILE_DATA
 
         *(.init.data)
diff --git a/xen/arch/riscv/xen.lds.S b/xen/arch/riscv/xen.lds.S
index 70db658fef..d9375a9616 100644
--- a/xen/arch/riscv/xen.lds.S
+++ b/xen/arch/riscv/xen.lds.S
@@ -114,17 +114,7 @@ SECTIONS
         *(.init.rodata)
         *(.init.rodata.*)
 
-        . = ALIGN(POINTER_ALIGN);
-        __setup_start = .;
-        *(.init.setup)
-        __setup_end = .;
-
-        __initcall_start = .;
-        *(.initcallpresmp.init)
-        __presmp_initcall_end = .;
-        *(.initcall1.init)
-        __initcall_end = .;
-
+        SETUP_DATA
         LOCK_PROFILE_DATA
 
         *(.init.data)
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index b9e888e596..8f943e11ea 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -223,16 +223,7 @@ SECTIONS
        *(.init.rodata)
        *(.init.rodata.*)
 
-       . = ALIGN(POINTER_ALIGN);
-       __setup_start = .;
-       *(.init.setup)
-       __setup_end = .;
-
-       __initcall_start = .;
-       *(.initcallpresmp.init)
-       __presmp_initcall_end = .;
-       *(.initcall1.init)
-       __initcall_end = .;
+       SETUP_DATA
 
        *(.init.data)
        *(.init.data.rel)
diff --git a/xen/include/xen/xen.lds.h b/xen/include/xen/xen.lds.h
index ea11e3fb62..958f8256b0 100644
--- a/xen/include/xen/xen.lds.h
+++ b/xen/include/xen/xen.lds.h
@@ -179,6 +179,18 @@
        *(.data.schedulers)           \
        __end_schedulers_array = .;
 
+#define SETUP_DATA                   \
+       . = ALIGN(POINTER_ALIGN);     \
+       __setup_start = .;            \
+       *(.init.setup)                \
+       __setup_end = .;              \
+                                     \
+       __initcall_start = .;         \
+       *(.initcallpresmp.init)       \
+       __presmp_initcall_end = .;    \
+       *(.initcall1.init)            \
+       __initcall_end = .;
+
 #ifdef CONFIG_HYPFS
 #define HYPFS_PARAM              \
        . = ALIGN(POINTER_ALIGN); \
-- 
2.55.0
Re: [PATCH] xen: Consolidate linker script setup data
Posted by Alejandro Vallejo 2 hours ago
On Wed Sep 23, 2026 at 6:19 PM CEST, Jason Andryuk wrote:
> .init.setup, .initcallpresmp.init, and .initcall1.init are duplicated
> across architectures.  Replace them with a common define, SETUP_DATA.
>
> Suggested-by: Grygorii Strashko <grygorii_strashko@epam.com>
> Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
> Reviewed-by: Alejandro Vallejo <alejandro.garciavallejo@amd.com>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> ---
> Alejandro reviewed internally.

In case it matters, I confirm.

Cheers,
Alejandro

> Jan reviewed off list.
> ---
>  xen/arch/arm/xen.lds.S    | 11 +----------
>  xen/arch/ppc/xen.lds.S    | 12 +-----------
>  xen/arch/riscv/xen.lds.S  | 12 +-----------
>  xen/arch/x86/xen.lds.S    | 11 +----------
>  xen/include/xen/xen.lds.h | 12 ++++++++++++
>  5 files changed, 16 insertions(+), 42 deletions(-)
>
> diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
> index d4d9594033..32afbfe131 100644
> --- a/xen/arch/arm/xen.lds.S
> +++ b/xen/arch/arm/xen.lds.S
> @@ -135,16 +135,7 @@ SECTIONS
>         *(.init.rodata)
>         *(.init.rodata.*)
>  
> -       . = ALIGN(POINTER_ALIGN);
> -       __setup_start = .;
> -       *(.init.setup)
> -       __setup_end = .;
> -
> -       __initcall_start = .;
> -       *(.initcallpresmp.init)
> -       __presmp_initcall_end = .;
> -       *(.initcall1.init)
> -       __initcall_end = .;
> +       SETUP_DATA
>  
>         . = ALIGN(4);
>         __alt_instructions = .;
> diff --git a/xen/arch/ppc/xen.lds.S b/xen/arch/ppc/xen.lds.S
> index d0f2ed43f1..37256c8865 100644
> --- a/xen/arch/ppc/xen.lds.S
> +++ b/xen/arch/ppc/xen.lds.S
> @@ -107,17 +107,7 @@ SECTIONS
>          *(.init.rodata)
>          *(.init.rodata.*)
>  
> -        . = ALIGN(POINTER_ALIGN);
> -        __setup_start = .;
> -        *(.init.setup)
> -        __setup_end = .;
> -
> -        __initcall_start = .;
> -        *(.initcallpresmp.init)
> -        __presmp_initcall_end = .;
> -        *(.initcall1.init)
> -        __initcall_end = .;
> -
> +        SETUP_DATA
>          LOCK_PROFILE_DATA
>  
>          *(.init.data)
> diff --git a/xen/arch/riscv/xen.lds.S b/xen/arch/riscv/xen.lds.S
> index 70db658fef..d9375a9616 100644
> --- a/xen/arch/riscv/xen.lds.S
> +++ b/xen/arch/riscv/xen.lds.S
> @@ -114,17 +114,7 @@ SECTIONS
>          *(.init.rodata)
>          *(.init.rodata.*)
>  
> -        . = ALIGN(POINTER_ALIGN);
> -        __setup_start = .;
> -        *(.init.setup)
> -        __setup_end = .;
> -
> -        __initcall_start = .;
> -        *(.initcallpresmp.init)
> -        __presmp_initcall_end = .;
> -        *(.initcall1.init)
> -        __initcall_end = .;
> -
> +        SETUP_DATA
>          LOCK_PROFILE_DATA
>  
>          *(.init.data)
> diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
> index b9e888e596..8f943e11ea 100644
> --- a/xen/arch/x86/xen.lds.S
> +++ b/xen/arch/x86/xen.lds.S
> @@ -223,16 +223,7 @@ SECTIONS
>         *(.init.rodata)
>         *(.init.rodata.*)
>  
> -       . = ALIGN(POINTER_ALIGN);
> -       __setup_start = .;
> -       *(.init.setup)
> -       __setup_end = .;
> -
> -       __initcall_start = .;
> -       *(.initcallpresmp.init)
> -       __presmp_initcall_end = .;
> -       *(.initcall1.init)
> -       __initcall_end = .;
> +       SETUP_DATA
>  
>         *(.init.data)
>         *(.init.data.rel)
> diff --git a/xen/include/xen/xen.lds.h b/xen/include/xen/xen.lds.h
> index ea11e3fb62..958f8256b0 100644
> --- a/xen/include/xen/xen.lds.h
> +++ b/xen/include/xen/xen.lds.h
> @@ -179,6 +179,18 @@
>         *(.data.schedulers)           \
>         __end_schedulers_array = .;
>  
> +#define SETUP_DATA                   \
> +       . = ALIGN(POINTER_ALIGN);     \
> +       __setup_start = .;            \
> +       *(.init.setup)                \
> +       __setup_end = .;              \
> +                                     \
> +       __initcall_start = .;         \
> +       *(.initcallpresmp.init)       \
> +       __presmp_initcall_end = .;    \
> +       *(.initcall1.init)            \
> +       __initcall_end = .;
> +
>  #ifdef CONFIG_HYPFS
>  #define HYPFS_PARAM              \
>         . = ALIGN(POINTER_ALIGN); \