Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | /* SPDX-License-Identifier: GPL-2.0 */ /* Kernel link layout for various "sections" * * Copyright (C) 1999-2003 Matthew Wilcox <willy at parisc-linux.org> * Copyright (C) 2000-2003 Paul Bame <bame at parisc-linux.org> * Copyright (C) 2000 John Marvin <jsm at parisc-linux.org> * Copyright (C) 2000 Michael Ang <mang with subcarrier.org> * Copyright (C) 2002 Randolph Chung <tausq with parisc-linux.org> * Copyright (C) 2003 James Bottomley <jejb with parisc-linux.org> * Copyright (C) 2006-2013 Helge Deller <deller@gmx.de> */ /* * Put page table entries (swapper_pg_dir) as the first thing in .bss. This * will ensure that it has .bss alignment (PAGE_SIZE). */ #define BSS_FIRST_SECTIONS *(.data..vm0.pmd) \ *(.data..vm0.pgd) \ *(.data..vm0.pte) #define CC_USING_PATCHABLE_FUNCTION_ENTRY #define RO_EXCEPTION_TABLE_ALIGN 8 #include <asm-generic/vmlinux.lds.h> /* needed for the processor specific cache alignment size */ #include <asm/cache.h> #include <asm/page.h> #include <asm/asm-offsets.h> #include <asm/thread_info.h> /* ld script to make hppa Linux kernel */ #ifndef CONFIG_64BIT OUTPUT_FORMAT("elf32-hppa-linux") OUTPUT_ARCH(hppa) #else OUTPUT_FORMAT("elf64-hppa-linux") OUTPUT_ARCH(hppa:hppa2.0w) #endif #define EXIT_TEXT_SECTIONS() .exit.text : { EXIT_TEXT } #if !defined(CONFIG_64BIT) || defined(CONFIG_MLONGCALLS) #define MLONGCALL_KEEP(x) #define MLONGCALL_DISCARD(x) x #else #define MLONGCALL_KEEP(x) x #define MLONGCALL_DISCARD(x) #endif ENTRY(parisc_kernel_start) #ifndef CONFIG_64BIT jiffies = jiffies_64 + 4; #else jiffies = jiffies_64; #endif SECTIONS { . = KERNEL_BINARY_TEXT_START; __init_begin = .; HEAD_TEXT_SECTION MLONGCALL_DISCARD(INIT_TEXT_SECTION(8)) . = ALIGN(PAGE_SIZE); INIT_DATA_SECTION(PAGE_SIZE) MLONGCALL_DISCARD(EXIT_TEXT_SECTIONS()) .exit.data : { EXIT_DATA } PERCPU_SECTION(8) . = ALIGN(4); .altinstructions : { __alt_instructions = .; *(.altinstructions) __alt_instructions_end = .; } . = ALIGN(HUGEPAGE_SIZE); __init_end = .; /* freed after init ends here */ _text = .; /* Text and read-only data */ _stext = .; MLONGCALL_KEEP(INIT_TEXT_SECTION(8)) .text ALIGN(PAGE_SIZE) : { TEXT_TEXT LOCK_TEXT SCHED_TEXT KPROBES_TEXT IRQENTRY_TEXT SOFTIRQENTRY_TEXT *(.text.do_softirq) *(.text.sys_exit) *(.text.do_sigaltstack) *(.text.do_fork) *(.text.div) *($$*) /* millicode routines */ *(.text.*) *(.fixup) *(.lock.text) /* out-of-line lock text */ *(.gnu.warning) } MLONGCALL_KEEP(EXIT_TEXT_SECTIONS()) . = ALIGN(PAGE_SIZE); _etext = .; /* End of text section */ /* Start of data section */ _sdata = .; /* Architecturally we need to keep __gp below 0x1000000 and thus * in front of RO_DATA() which stores lots of tracepoint * and ftrace symbols. */ #ifdef CONFIG_64BIT . = ALIGN(16); /* Linkage tables */ .opd : { __start_opd = .; *(.opd) __end_opd = .; } PROVIDE (__gp = .); .plt : { *(.plt) } .dlt : { *(.dlt) } #endif RO_DATA(PAGE_SIZE) /* unwind info */ . = ALIGN(4); .PARISC.unwind : { __start___unwind = .; *(.PARISC.unwind) __stop___unwind = .; } /* writeable */ /* Make sure this is page aligned so * that we can properly leave these * as writable */ . = ALIGN(HUGEPAGE_SIZE); data_start = .; /* Data */ RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, PAGE_SIZE) /* PA-RISC locks requires 16-byte alignment */ . = ALIGN(16); .data..lock_aligned : { *(.data..lock_aligned) } /* End of data section */ . = ALIGN(PAGE_SIZE); _edata = .; /* BSS */ BSS_SECTION(PAGE_SIZE, PAGE_SIZE, PAGE_SIZE) . = ALIGN(HUGEPAGE_SIZE); _end = . ; STABS_DEBUG ELF_DETAILS .note 0 : { *(.note) } /* Sections to be discarded */ DISCARDS /DISCARD/ : { #ifdef CONFIG_64BIT /* temporary hack until binutils is fixed to not emit these * for static binaries */ *(.interp) *(.dynsym) *(.dynstr) *(.dynamic) *(.hash) *(.gnu.hash) #endif } } |