forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.2 KiB
177 lines
5.2 KiB
#include <asm/vmlinux.lds.h> |
|
#include <asm/page.h> |
|
|
|
OUTPUT_FORMAT(ELF_FORMAT) |
|
OUTPUT_ARCH(ELF_ARCH) |
|
ENTRY(_start) |
|
jiffies = jiffies_64; |
|
|
|
VERSION { |
|
{ |
|
local: *; |
|
}; |
|
} |
|
|
|
SECTIONS |
|
{ |
|
PROVIDE (__executable_start = START); |
|
. = START + SIZEOF_HEADERS; |
|
.interp : { *(.interp) } |
|
__binary_start = .; |
|
. = ALIGN(4096); /* Init code and data */ |
|
_text = .; |
|
INIT_TEXT_SECTION(PAGE_SIZE) |
|
|
|
. = ALIGN(PAGE_SIZE); |
|
|
|
/* Read-only sections, merged into text segment: */ |
|
.hash : { *(.hash) } |
|
.gnu.hash : { *(.gnu.hash) } |
|
.dynsym : { *(.dynsym) } |
|
.dynstr : { *(.dynstr) } |
|
.gnu.version : { *(.gnu.version) } |
|
.gnu.version_d : { *(.gnu.version_d) } |
|
.gnu.version_r : { *(.gnu.version_r) } |
|
.rel.init : { *(.rel.init) } |
|
.rela.init : { *(.rela.init) } |
|
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } |
|
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } |
|
.rel.fini : { *(.rel.fini) } |
|
.rela.fini : { *(.rela.fini) } |
|
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } |
|
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } |
|
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } |
|
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } |
|
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } |
|
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } |
|
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } |
|
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } |
|
.rel.ctors : { *(.rel.ctors) } |
|
.rela.ctors : { *(.rela.ctors) } |
|
.rel.dtors : { *(.rel.dtors) } |
|
.rela.dtors : { *(.rela.dtors) } |
|
.rel.got : { *(.rel.got) } |
|
.rela.got : { *(.rela.got) } |
|
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } |
|
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } |
|
.rel.plt : { |
|
*(.rel.plt) |
|
PROVIDE_HIDDEN(__rel_iplt_start = .); |
|
*(.rel.iplt) |
|
PROVIDE_HIDDEN(__rel_iplt_end = .); |
|
} |
|
.rela.plt : { |
|
*(.rela.plt) |
|
PROVIDE_HIDDEN(__rela_iplt_start = .); |
|
*(.rela.iplt) |
|
PROVIDE_HIDDEN(__rela_iplt_end = .); |
|
} |
|
.init : { |
|
KEEP (*(.init)) |
|
} =0x90909090 |
|
.plt : { *(.plt) } |
|
.text : { |
|
_stext = .; |
|
TEXT_TEXT |
|
SCHED_TEXT |
|
CPUIDLE_TEXT |
|
LOCK_TEXT |
|
IRQENTRY_TEXT |
|
SOFTIRQENTRY_TEXT |
|
*(.fixup) |
|
*(.stub .text.* .gnu.linkonce.t.*) |
|
/* .gnu.warning sections are handled specially by elf32.em. */ |
|
*(.gnu.warning) |
|
|
|
. = ALIGN(PAGE_SIZE); |
|
} =0x90909090 |
|
. = ALIGN(PAGE_SIZE); |
|
.syscall_stub : { |
|
__syscall_stub_start = .; |
|
*(.__syscall_stub*) |
|
__syscall_stub_end = .; |
|
} |
|
.fini : { |
|
KEEP (*(.fini)) |
|
} =0x90909090 |
|
|
|
.kstrtab : { *(.kstrtab) } |
|
|
|
#include <asm/common.lds.S> |
|
|
|
__init_begin = .; |
|
init.data : { INIT_DATA } |
|
__init_end = .; |
|
|
|
/* Ensure the __preinit_array_start label is properly aligned. We |
|
could instead move the label definition inside the section, but |
|
the linker would then create the section even if it turns out to |
|
be empty, which isn't pretty. */ |
|
. = ALIGN(32 / 8); |
|
.preinit_array : { *(.preinit_array) } |
|
.init_array : { *(.init_array) } |
|
.fini_array : { *(.fini_array) } |
|
.data : { |
|
INIT_TASK_DATA(KERNEL_STACK_SIZE) |
|
. = ALIGN(KERNEL_STACK_SIZE); |
|
*(.data..init_irqstack) |
|
DATA_DATA |
|
*(.data.* .gnu.linkonce.d.*) |
|
SORT(CONSTRUCTORS) |
|
} |
|
.data1 : { *(.data1) } |
|
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } |
|
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } |
|
.eh_frame : { KEEP (*(.eh_frame)) } |
|
.gcc_except_table : { *(.gcc_except_table) } |
|
.dynamic : { *(.dynamic) } |
|
.ctors : { |
|
/* gcc uses crtbegin.o to find the start of |
|
the constructors, so we make sure it is |
|
first. Because this is a wildcard, it |
|
doesn't matter if the user does not |
|
actually link against crtbegin.o; the |
|
linker won't look for a file to match a |
|
wildcard. The wildcard also means that it |
|
doesn't matter which directory crtbegin.o |
|
is in. */ |
|
KEEP (*crtbegin.o(.ctors)) |
|
/* We don't want to include the .ctor section from |
|
from the crtend.o file until after the sorted ctors. |
|
The .ctor section from the crtend file contains the |
|
end of ctors marker and it must be last */ |
|
KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) |
|
KEEP (*(SORT(.ctors.*))) |
|
KEEP (*(.ctors)) |
|
} |
|
.dtors : { |
|
KEEP (*crtbegin.o(.dtors)) |
|
KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) |
|
KEEP (*(SORT(.dtors.*))) |
|
KEEP (*(.dtors)) |
|
} |
|
.jcr : { KEEP (*(.jcr)) } |
|
.got : { *(.got.plt) *(.got) } |
|
_edata = .; |
|
PROVIDE (edata = .); |
|
.bss : { |
|
__bss_start = .; |
|
*(.dynbss) |
|
*(.bss .bss.* .gnu.linkonce.b.*) |
|
*(COMMON) |
|
/* Align here to ensure that the .bss section occupies space up to |
|
_end. Align after .bss to ensure correct alignment even if the |
|
.bss section disappears because there are no input sections. */ |
|
. = ALIGN(32 / 8); |
|
. = ALIGN(32 / 8); |
|
} |
|
__bss_stop = .; |
|
_end = .; |
|
PROVIDE (end = .); |
|
|
|
STABS_DEBUG |
|
DWARF_DEBUG |
|
ELF_DETAILS |
|
|
|
DISCARDS |
|
}
|
|
|