1 /* SPDX-License-Identifier: GPL-2.0-or-later * !! 1 /* ld script to make i386 Linux kernel 2 /* !! 2 * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>; 3 * OpenRISC vmlinux.lds.S << 4 * << 5 * Linux architectural port borrowing liberall << 6 * others. All original copyrights apply as p << 7 * declaration. << 8 * << 9 * Modifications for the OpenRISC architecture << 10 * Copyright (C) 2003 Matjaz Breskvar <phoenix@ << 11 * Copyright (C) 2010-2011 Jonas Bonn <jonas@so << 12 * << 13 * ld script for OpenRISC architecture << 14 */ 3 */ 15 4 16 /* TODO << 17 * - clean up __offset & stuff << 18 * - change all 8192 alignment to << 19 * - recheck if all alignments ar << 20 */ << 21 << 22 # define LOAD_OFFSET PAGE_OFFSET << 23 # define LOAD_BASE PAGE_OFFSET << 24 << 25 #include <asm/page.h> << 26 #include <asm/cache.h> << 27 #include <asm/thread_info.h> << 28 #include <asm-generic/vmlinux.lds.h> 5 #include <asm-generic/vmlinux.lds.h> 29 !! 6 30 #ifdef __OR1K__ !! 7 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") 31 #define __OUTPUT_FORMAT "elf32-or1k" !! 8 OUTPUT_ARCH(i386) 32 #else !! 9 ENTRY(startup_32) 33 #define __OUTPUT_FORMAT "elf32-or32" !! 10 jiffies = jiffies_64; 34 #endif << 35 << 36 OUTPUT_FORMAT(__OUTPUT_FORMAT, __OUTPUT_FORMAT << 37 jiffies = jiffies_64 + 4; << 38 << 39 SECTIONS 11 SECTIONS 40 { 12 { 41 /* Read-only sections, merged into tex !! 13 . = 0xC0000000 + 0x100000; 42 . = LOAD_BASE ; !! 14 /* read-only */ 43 !! 15 _text = .; /* Text and read-only data */ 44 _text = .; !! 16 .text : { 45 !! 17 *(.text) 46 /* _s_kernel_ro must be page aligned * !! 18 *(.fixup) 47 . = ALIGN(PAGE_SIZE); !! 19 *(.gnu.warning) 48 _s_kernel_ro = .; !! 20 } = 0x9090 49 !! 21 50 .text : AT(ADDR(.tex !! 22 _etext = .; /* End of text section */ 51 { !! 23 52 _stext = .; !! 24 . = ALIGN(16); /* Exception table */ 53 TEXT_TEXT !! 25 __start___ex_table = .; 54 SCHED_TEXT !! 26 __ex_table : { *(__ex_table) } 55 LOCK_TEXT !! 27 __stop___ex_table = .; 56 KPROBES_TEXT !! 28 57 IRQENTRY_TEXT !! 29 RODATA 58 SOFTIRQENTRY_TEXT !! 30 59 *(.fixup) !! 31 /* writeable */ 60 *(.text.__*) !! 32 .data : { /* Data */ 61 _etext = .; !! 33 *(.data) >> 34 CONSTRUCTORS 62 } 35 } 63 /* TODO: Check if fixup and text.__* a << 64 * fixup is definitely necessary << 65 */ << 66 << 67 _sdata = .; << 68 << 69 /* Page alignment required for RO_DATA << 70 RO_DATA(PAGE_SIZE) << 71 _e_kernel_ro = .; << 72 << 73 /* Whatever comes after _e_kernel_ro h << 74 << 75 /* 32 here is cacheline size... rechec << 76 RW_DATA(32, PAGE_SIZE, PAGE_SIZE) << 77 36 78 _edata = .; !! 37 . = ALIGN(4096); 79 !! 38 __nosave_begin = .; 80 EXCEPTION_TABLE(4) !! 39 .data_nosave : { *(.data.nosave) } 81 !! 40 . = ALIGN(4096); 82 /* Init code and data */ !! 41 __nosave_end = .; 83 . = ALIGN(PAGE_SIZE); !! 42 84 __init_begin = .; !! 43 . = ALIGN(4096); 85 !! 44 .data.page_aligned : { *(.data.idt) } 86 HEAD_TEXT_SECTION !! 45 87 !! 46 . = ALIGN(32); 88 /* Page aligned */ !! 47 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 89 INIT_TEXT_SECTION(PAGE_SIZE) !! 48 90 !! 49 _edata = .; /* End of data section */ 91 /* Align __setup_start on 16 byte boun !! 50 92 INIT_DATA_SECTION(16) !! 51 . = ALIGN(8192); /* init_task */ 93 !! 52 .data.init_task : { *(.data.init_task) } 94 PERCPU_SECTION(L1_CACHE_BYTES) !! 53 95 !! 54 /* will be freed after init */ 96 __init_end = .; !! 55 . = ALIGN(4096); /* Init code and data */ 97 !! 56 __init_begin = .; 98 BSS_SECTION(0, 0, 0x20) !! 57 .init.text : { 99 !! 58 _sinittext = .; 100 _end = .; !! 59 *(.init.text) 101 !! 60 _einittext = .; 102 /* Throw in the debugging sections */ !! 61 } 103 STABS_DEBUG !! 62 .init.data : { *(.init.data) } 104 DWARF_DEBUG !! 63 . = ALIGN(16); 105 ELF_DETAILS !! 64 __setup_start = .; >> 65 .init.setup : { *(.init.setup) } >> 66 __setup_end = .; >> 67 __start___param = .; >> 68 __param : { *(__param) } >> 69 __stop___param = .; >> 70 __initcall_start = .; >> 71 .initcall.init : { >> 72 *(.initcall1.init) >> 73 *(.initcall2.init) >> 74 *(.initcall3.init) >> 75 *(.initcall4.init) >> 76 *(.initcall5.init) >> 77 *(.initcall6.init) >> 78 *(.initcall7.init) >> 79 } >> 80 __initcall_end = .; >> 81 __con_initcall_start = .; >> 82 .con_initcall.init : { *(.con_initcall.init) } >> 83 __con_initcall_end = .; >> 84 SECURITY_INIT >> 85 . = ALIGN(4); >> 86 __alt_instructions = .; >> 87 .altinstructions : { *(.altinstructions) } >> 88 __alt_instructions_end = .; >> 89 .altinstr_replacement : { *(.altinstr_replacement) } >> 90 /* .exit.text is discard at runtime, not link time, to deal with references >> 91 from .altinstructions and .eh_frame */ >> 92 .exit.text : { *(.exit.text) } >> 93 .exit.data : { *(.exit.data) } >> 94 . = ALIGN(4096); >> 95 __initramfs_start = .; >> 96 .init.ramfs : { *(.init.ramfs) } >> 97 __initramfs_end = .; >> 98 . = ALIGN(32); >> 99 __per_cpu_start = .; >> 100 .data.percpu : { *(.data.percpu) } >> 101 __per_cpu_end = .; >> 102 . = ALIGN(4096); >> 103 __init_end = .; >> 104 /* freed after init ends here */ >> 105 >> 106 __bss_start = .; /* BSS */ >> 107 .bss : { *(.bss) } >> 108 __bss_stop = .; >> 109 >> 110 _end = . ; >> 111 >> 112 /* Sections to be discarded */ >> 113 /DISCARD/ : { >> 114 *(.exitcall.exit) >> 115 } 106 116 107 /* Sections to be discarded -- must be !! 117 /* Stabs debugging sections. */ 108 DISCARDS !! 118 .stab 0 : { *(.stab) } >> 119 .stabstr 0 : { *(.stabstr) } >> 120 .stab.excl 0 : { *(.stab.excl) } >> 121 .stab.exclstr 0 : { *(.stab.exclstr) } >> 122 .stab.index 0 : { *(.stab.index) } >> 123 .stab.indexstr 0 : { *(.stab.indexstr) } >> 124 .comment 0 : { *(.comment) } 109 } 125 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.