Commit 1b1fbbca authored by Sam Ravnborg's avatar Sam Ravnborg Committed by David S. Miller

sparc,sparc64: prepare vmlinux.lds.S for unification

This patch makes the two vmlinux.lds.S files identical
and serve as documentation for the changes in each file.

This mainly add stuffs to sparc32 that is otherwise only
used by sparc64 and thus it should have no effect.

Build tested only.
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 63ef3482
/* ld script to make SparcLinux kernel */ /* ld script for sparc32/sparc64 kernel */
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
#include <asm/page.h> #include <asm/page.h>
#ifdef CONFIG_SPARC32
#define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS
#define TEXTSTART 0xf0004000
#define SMP_CACHE_BYTES_SHIFT 5
#else
#define SMP_CACHE_BYTES_SHIFT 6
#define INITIAL_ADDRESS 0x4000
#define TEXTSTART 0x0000000000404000
#endif
#define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
#ifdef CONFIG_SPARC32
OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc") OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
OUTPUT_ARCH(sparc) OUTPUT_ARCH(sparc)
ENTRY(_start) ENTRY(_start)
jiffies = jiffies_64 + 4; jiffies = jiffies_64 + 4;
#else
/* sparc64 */
OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
OUTPUT_ARCH(sparc:v9a)
ENTRY(_start)
jiffies = jiffies_64;
#endif
SECTIONS SECTIONS
{ {
. = 0x10000 + SIZEOF_HEADERS; /* swapper_low_pmd_dir is sparc64 only */
.text 0xf0004000 : swapper_low_pmd_dir = 0x0000000000402000;
. = INITIAL_ADDRESS;
.text TEXTSTART :
{ {
_text = .; _text = .;
*(.text.head) *(.text.head)
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
KPROBES_TEXT
*(.gnu.warning) *(.gnu.warning)
} = 0 } = 0
_etext = .; _etext = .;
PROVIDE (etext = .); PROVIDE (etext = .);
RODATA
RO_DATA(PAGE_SIZE)
.data : { .data : {
DATA_DATA DATA_DATA
CONSTRUCTORS CONSTRUCTORS
...@@ -29,25 +57,32 @@ SECTIONS ...@@ -29,25 +57,32 @@ SECTIONS
.data1 : { .data1 : {
*(.data1) *(.data1)
} }
. = ALIGN(SMP_CACHE_BYTES);
.data.cacheline_aligned : {
*(.data.cacheline_aligned)
}
. = ALIGN(SMP_CACHE_BYTES);
.data.read_mostly : {
*(.data.read_mostly)
}
_edata = .; _edata = .;
PROVIDE (edata = .); PROVIDE (edata = .);
.fixup : { .fixup : {
__start___fixup = .; __start___fixup = .;
*(.fixup) *(.fixup)
__stop___fixup = .; __stop___fixup = .;
} }
. = ALIGN(16);
__ex_table : { __ex_table : {
__start___ex_table = .; __start___ex_table = .;
*(__ex_table) *(__ex_table)
__stop___ex_table = .; __stop___ex_table = .;
} }
NOTES NOTES
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__init_begin = .;
.init.text : { .init.text : {
__init_begin = .;
_sinittext = .; _sinittext = .;
INIT_TEXT INIT_TEXT
_einittext = .; _einittext = .;
...@@ -65,7 +100,7 @@ SECTIONS ...@@ -65,7 +100,7 @@ SECTIONS
.initcall.init : { .initcall.init : {
__initcall_start = .; __initcall_start = .;
INITCALLS INITCALLS
__initcall_end = .; __initcall_end = .;
} }
.con_initcall.init : { .con_initcall.init : {
__con_initcall_start = .; __con_initcall_start = .;
...@@ -74,31 +109,54 @@ SECTIONS ...@@ -74,31 +109,54 @@ SECTIONS
} }
SECURITY_INIT SECURITY_INIT
. = ALIGN(4);
.tsb_ldquad_phys_patch : {
__tsb_ldquad_phys_patch = .;
*(.tsb_ldquad_phys_patch)
__tsb_ldquad_phys_patch_end = .;
}
.tsb_phys_patch : {
__tsb_phys_patch = .;
*(.tsb_phys_patch)
__tsb_phys_patch_end = .;
}
.cpuid_patch : {
__cpuid_patch = .;
*(.cpuid_patch)
__cpuid_patch_end = .;
}
.sun4v_1insn_patch : {
__sun4v_1insn_patch = .;
*(.sun4v_1insn_patch)
__sun4v_1insn_patch_end = .;
}
.sun4v_2insn_patch : {
__sun4v_2insn_patch = .;
*(.sun4v_2insn_patch)
__sun4v_2insn_patch_end = .;
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
.init.ramfs : { .init.ramfs : {
__initramfs_start = .; __initramfs_start = .;
*(.init.ramfs) *(.init.ramfs)
__initramfs_end = .; __initramfs_end = .;
} }
#endif #endif
PERCPU(PAGE_SIZE) PERCPU(PAGE_SIZE)
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__init_end = .; __init_end = .;
. = ALIGN(32);
.data.cacheline_aligned : {
*(.data.cacheline_aligned)
}
. = ALIGN(32);
.data.read_mostly : {
*(.data.read_mostly)
}
__bss_start = .; __bss_start = .;
.sbss : { .sbss : {
*(.sbss) *(.sbss)
*(.scommon) } *(.scommon)
}
.bss : { .bss : {
*(.dynbss) *(.dynbss)
*(.bss) *(.bss)
...@@ -106,6 +164,7 @@ SECTIONS ...@@ -106,6 +164,7 @@ SECTIONS
} }
_end = . ; _end = . ;
PROVIDE (end = .); PROVIDE (end = .);
/DISCARD/ : { /DISCARD/ : {
EXIT_TEXT EXIT_TEXT
EXIT_DATA EXIT_DATA
......
/* ld script to make UltraLinux kernel */ /* ld script for sparc32/sparc64 kernel */
#include <asm/page.h>
#include <asm-generic/vmlinux.lds.h> #include <asm-generic/vmlinux.lds.h>
#include <asm/page.h>
#ifdef CONFIG_SPARC32
#define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS
#define TEXTSTART 0xf0004000
#define SMP_CACHE_BYTES_SHIFT 5
#else
#define SMP_CACHE_BYTES_SHIFT 6
#define INITIAL_ADDRESS 0x4000
#define TEXTSTART 0x0000000000404000
#endif
#define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
#ifdef CONFIG_SPARC32
OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
OUTPUT_ARCH(sparc)
ENTRY(_start)
jiffies = jiffies_64 + 4;
#else
/* sparc64 */
OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc") OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
OUTPUT_ARCH(sparc:v9a) OUTPUT_ARCH(sparc:v9a)
ENTRY(_start) ENTRY(_start)
jiffies = jiffies_64; jiffies = jiffies_64;
#endif
SECTIONS SECTIONS
{ {
/* swapper_low_pmd_dir is sparc64 only */
swapper_low_pmd_dir = 0x0000000000402000; swapper_low_pmd_dir = 0x0000000000402000;
. = 0x4000; . = INITIAL_ADDRESS;
.text 0x0000000000404000 : { .text TEXTSTART :
{
_text = .; _text = .;
*(.text.head)
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
...@@ -24,25 +50,27 @@ SECTIONS ...@@ -24,25 +50,27 @@ SECTIONS
PROVIDE (etext = .); PROVIDE (etext = .);
RO_DATA(PAGE_SIZE) RO_DATA(PAGE_SIZE)
.data : { .data : {
DATA_DATA DATA_DATA
CONSTRUCTORS CONSTRUCTORS
} }
.data1 : { .data1 : {
*(.data1) *(.data1)
} }
. = ALIGN(64); . = ALIGN(SMP_CACHE_BYTES);
.data.cacheline_aligned : { .data.cacheline_aligned : {
*(.data.cacheline_aligned) *(.data.cacheline_aligned)
} }
. = ALIGN(64); . = ALIGN(SMP_CACHE_BYTES);
.data.read_mostly : { .data.read_mostly : {
*(.data.read_mostly) *(.data.read_mostly)
} }
_edata = .; _edata = .;
PROVIDE (edata = .); PROVIDE (edata = .);
.fixup : { .fixup : {
__start___fixup = .;
*(.fixup) *(.fixup)
__stop___fixup = .;
} }
. = ALIGN(16); . = ALIGN(16);
__ex_table : { __ex_table : {
...@@ -59,6 +87,7 @@ SECTIONS ...@@ -59,6 +87,7 @@ SECTIONS
INIT_TEXT INIT_TEXT
_einittext = .; _einittext = .;
} }
__init_text_end = .;
.init.data : { .init.data : {
INIT_DATA INIT_DATA
} }
......
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