forked from Minki/linux
127 lines
2.2 KiB
ArmAsm
127 lines
2.2 KiB
ArmAsm
|
/*
|
||
|
* ld script to make ARM Linux kernel
|
||
|
* taken from the i386 version by Russell King
|
||
|
* Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
||
|
*/
|
||
|
|
||
|
#include <asm-generic/vmlinux.lds.h>
|
||
|
#include <asm/thread_info.h>
|
||
|
#include <asm/memory.h>
|
||
|
#include <asm/page.h>
|
||
|
|
||
|
#define ARM_EXIT_KEEP(x)
|
||
|
#define ARM_EXIT_DISCARD(x) x
|
||
|
|
||
|
OUTPUT_ARCH(aarch64)
|
||
|
ENTRY(stext)
|
||
|
|
||
|
jiffies = jiffies_64;
|
||
|
|
||
|
SECTIONS
|
||
|
{
|
||
|
/*
|
||
|
* XXX: The linker does not define how output sections are
|
||
|
* assigned to input sections when there are multiple statements
|
||
|
* matching the same input section name. There is no documented
|
||
|
* order of matching.
|
||
|
*/
|
||
|
/DISCARD/ : {
|
||
|
ARM_EXIT_DISCARD(EXIT_TEXT)
|
||
|
ARM_EXIT_DISCARD(EXIT_DATA)
|
||
|
EXIT_CALL
|
||
|
*(.discard)
|
||
|
*(.discard.*)
|
||
|
}
|
||
|
|
||
|
. = PAGE_OFFSET + TEXT_OFFSET;
|
||
|
|
||
|
.head.text : {
|
||
|
_text = .;
|
||
|
HEAD_TEXT
|
||
|
}
|
||
|
.text : { /* Real text segment */
|
||
|
_stext = .; /* Text and read-only data */
|
||
|
*(.smp.pen.text)
|
||
|
__exception_text_start = .;
|
||
|
*(.exception.text)
|
||
|
__exception_text_end = .;
|
||
|
IRQENTRY_TEXT
|
||
|
TEXT_TEXT
|
||
|
SCHED_TEXT
|
||
|
LOCK_TEXT
|
||
|
*(.fixup)
|
||
|
*(.gnu.warning)
|
||
|
. = ALIGN(16);
|
||
|
*(.got) /* Global offset table */
|
||
|
}
|
||
|
|
||
|
RO_DATA(PAGE_SIZE)
|
||
|
|
||
|
_etext = .; /* End of text and rodata section */
|
||
|
|
||
|
. = ALIGN(PAGE_SIZE);
|
||
|
__init_begin = .;
|
||
|
|
||
|
INIT_TEXT_SECTION(8)
|
||
|
.exit.text : {
|
||
|
ARM_EXIT_KEEP(EXIT_TEXT)
|
||
|
}
|
||
|
. = ALIGN(16);
|
||
|
.init.data : {
|
||
|
INIT_DATA
|
||
|
INIT_SETUP(16)
|
||
|
INIT_CALLS
|
||
|
CON_INITCALL
|
||
|
SECURITY_INITCALL
|
||
|
INIT_RAM_FS
|
||
|
}
|
||
|
.exit.data : {
|
||
|
ARM_EXIT_KEEP(EXIT_DATA)
|
||
|
}
|
||
|
|
||
|
PERCPU_SECTION(64)
|
||
|
|
||
|
__init_end = .;
|
||
|
. = ALIGN(THREAD_SIZE);
|
||
|
__data_loc = .;
|
||
|
|
||
|
.data : AT(__data_loc) {
|
||
|
_data = .; /* address in memory */
|
||
|
_sdata = .;
|
||
|
|
||
|
/*
|
||
|
* first, the init task union, aligned
|
||
|
* to an 8192 byte boundary.
|
||
|
*/
|
||
|
INIT_TASK_DATA(THREAD_SIZE)
|
||
|
NOSAVE_DATA
|
||
|
CACHELINE_ALIGNED_DATA(64)
|
||
|
READ_MOSTLY_DATA(64)
|
||
|
|
||
|
/*
|
||
|
* The exception fixup table (might need resorting at runtime)
|
||
|
*/
|
||
|
. = ALIGN(32);
|
||
|
__start___ex_table = .;
|
||
|
*(__ex_table)
|
||
|
__stop___ex_table = .;
|
||
|
|
||
|
/*
|
||
|
* and the usual data section
|
||
|
*/
|
||
|
DATA_DATA
|
||
|
CONSTRUCTORS
|
||
|
|
||
|
_edata = .;
|
||
|
}
|
||
|
_edata_loc = __data_loc + SIZEOF(.data);
|
||
|
|
||
|
NOTES
|
||
|
|
||
|
BSS_SECTION(0, 0, 0)
|
||
|
_end = .;
|
||
|
|
||
|
STABS_DEBUG
|
||
|
.comment 0 : { *(.comment) }
|
||
|
}
|