Commit 4096b46f authored by Sam Ravnborg's avatar Sam Ravnborg

sparc64: fix alignment bug in linker definition script

The RO_DATA section were hardcoded to a specific
alignment in include/asm-generic/vmlinux.h.
But for sparc64 this did not match the PAGE_SIZE.

Introduce a new section definition named:
RO_DATA that takes actual alignment as parameter.
RODATA are provided for backward compatibility.

On top of this avoid hardcoding alignment for
sparc64 in reset of the script
Fix is build-tested on sparc64 + x86_64.
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent c420bc9f
/* ld script to make UltraLinux kernel */ /* ld script to make UltraLinux kernel */
#include <asm/page.h>
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
...@@ -23,7 +24,7 @@ SECTIONS ...@@ -23,7 +24,7 @@ SECTIONS
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
RODATA RO_DATA(PAGE_SIZE)
.data : .data :
{ {
...@@ -44,7 +45,7 @@ SECTIONS ...@@ -44,7 +45,7 @@ SECTIONS
__ex_table : { *(__ex_table) } __ex_table : { *(__ex_table) }
__stop___ex_table = .; __stop___ex_table = .;
. = ALIGN(8192); . = ALIGN(PAGE_SIZE);
__init_begin = .; __init_begin = .;
.init.text : { .init.text : {
_sinittext = .; _sinittext = .;
...@@ -83,17 +84,17 @@ SECTIONS ...@@ -83,17 +84,17 @@ SECTIONS
__sun4v_2insn_patch_end = .; __sun4v_2insn_patch_end = .;
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
. = ALIGN(8192); . = ALIGN(PAGE_SIZE);
__initramfs_start = .; __initramfs_start = .;
.init.ramfs : { *(.init.ramfs) } .init.ramfs : { *(.init.ramfs) }
__initramfs_end = .; __initramfs_end = .;
#endif #endif
. = ALIGN(8192); . = ALIGN(PAGE_SIZE);
__per_cpu_start = .; __per_cpu_start = .;
.data.percpu : { *(.data.percpu) } .data.percpu : { *(.data.percpu) }
__per_cpu_end = .; __per_cpu_end = .;
. = ALIGN(8192); . = ALIGN(PAGE_SIZE);
__init_end = .; __init_end = .;
__bss_start = .; __bss_start = .;
.sbss : { *(.sbss) *(.scommon) } .sbss : { *(.sbss) *(.scommon) }
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
*(.data) \ *(.data) \
*(.data.init.refok) *(.data.init.refok)
#define RODATA \ #define RO_DATA(align) \
. = ALIGN(4096); \ . = ALIGN((align)); \
.rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__start_rodata) = .; \ VMLINUX_SYMBOL(__start_rodata) = .; \
*(.rodata) *(.rodata.*) \ *(.rodata) *(.rodata.*) \
...@@ -135,7 +135,11 @@ ...@@ -135,7 +135,11 @@
VMLINUX_SYMBOL(__end_rodata) = .; \ VMLINUX_SYMBOL(__end_rodata) = .; \
} \ } \
\ \
. = ALIGN(4096); . = ALIGN((align));
/* RODATA provided for backward compatibility.
* All archs are supposed to use RO_DATA() */
#define RODATA RO_DATA(4096)
#define SECURITY_INIT \ #define SECURITY_INIT \
.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \ .security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment