0001
0002 #include <asm/asm-offsets.h>
0003 #include <asm/thread_info.h>
0004
0005 #define PAGE_SIZE _PAGE_SIZE
0006
0007
0008
0009
0010
0011 #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
0012
0013
0014 #ifndef CONFIG_CAVIUM_OCTEON_SOC
0015 #define EMITS_PT_NOTE
0016 #endif
0017
0018 #include <asm-generic/vmlinux.lds.h>
0019
0020 #undef mips
0021 #define mips mips
0022 OUTPUT_ARCH(mips)
0023 ENTRY(kernel_entry)
0024 PHDRS {
0025 text PT_LOAD FLAGS(7);
0026 #ifndef CONFIG_CAVIUM_OCTEON_SOC
0027 note PT_NOTE FLAGS(4);
0028 #endif
0029 }
0030
0031 #ifdef CONFIG_32BIT
0032 #ifdef CONFIG_CPU_LITTLE_ENDIAN
0033 jiffies = jiffies_64;
0034 #else
0035 jiffies = jiffies_64 + 4;
0036 #endif
0037 #else
0038 jiffies = jiffies_64;
0039 #endif
0040
0041 SECTIONS
0042 {
0043 #ifdef CONFIG_BOOT_ELF64
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 . = 0xffffffff80300000;
0057 #endif
0058 . = LINKER_LOAD_ADDRESS;
0059
0060 _text = .;
0061 .text : {
0062 TEXT_TEXT
0063 SCHED_TEXT
0064 CPUIDLE_TEXT
0065 LOCK_TEXT
0066 KPROBES_TEXT
0067 IRQENTRY_TEXT
0068 SOFTIRQENTRY_TEXT
0069 *(.fixup)
0070 *(.gnu.warning)
0071 . = ALIGN(16);
0072 *(.got)
0073 } :text = 0
0074 _etext = .;
0075
0076 EXCEPTION_TABLE(16)
0077
0078
0079 __dbe_table : {
0080 __start___dbe_table = .;
0081 KEEP(*(__dbe_table))
0082 __stop___dbe_table = .;
0083 }
0084
0085 _sdata = .;
0086 RO_DATA(4096)
0087
0088
0089 .data : {
0090 . = . + DATAOFFSET;
0091
0092 INIT_TASK_DATA(THREAD_SIZE)
0093 NOSAVE_DATA
0094 PAGE_ALIGNED_DATA(PAGE_SIZE)
0095 CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
0096 READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
0097 DATA_DATA
0098 CONSTRUCTORS
0099 }
0100 BUG_TABLE
0101 _gp = . + 0x8000;
0102 .lit8 : {
0103 *(.lit8)
0104 }
0105 .lit4 : {
0106 *(.lit4)
0107 }
0108
0109
0110
0111 .sdata : {
0112 *(.sdata)
0113 }
0114 _edata = .;
0115
0116
0117 . = ALIGN(PAGE_SIZE);
0118 __init_begin = .;
0119 INIT_TEXT_SECTION(PAGE_SIZE)
0120 INIT_DATA_SECTION(16)
0121
0122 . = ALIGN(4);
0123 .mips.machines.init : AT(ADDR(.mips.machines.init) - LOAD_OFFSET) {
0124 __mips_machines_start = .;
0125 KEEP(*(.mips.machines.init))
0126 __mips_machines_end = .;
0127 }
0128
0129
0130
0131
0132 .exit.text : {
0133 EXIT_TEXT
0134 }
0135 .exit.data : {
0136 EXIT_DATA
0137 }
0138 #ifdef CONFIG_SMP
0139 PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
0140 #endif
0141
0142 .rel.dyn : ALIGN(8) {
0143 *(.rel)
0144 *(.rel*)
0145 }
0146
0147 #ifdef CONFIG_MIPS_ELF_APPENDED_DTB
0148 STRUCT_ALIGN();
0149 .appended_dtb : AT(ADDR(.appended_dtb) - LOAD_OFFSET) {
0150 *(.appended_dtb)
0151 KEEP(*(.appended_dtb))
0152 }
0153 #endif
0154
0155 #ifdef CONFIG_RELOCATABLE
0156 . = ALIGN(4);
0157
0158 .data.reloc : {
0159 _relocation_start = .;
0160
0161
0162
0163
0164
0165
0166
0167
0168 LONG(0xFFFFFFFF);
0169 FILL(0);
0170 . += CONFIG_RELOCATION_TABLE_SIZE - 4;
0171 _relocation_end = .;
0172 }
0173 #endif
0174
0175 #ifdef CONFIG_MIPS_RAW_APPENDED_DTB
0176 .fill : {
0177 FILL(0);
0178 BYTE(0);
0179 STRUCT_ALIGN();
0180 }
0181 __appended_dtb = .;
0182
0183 . += 0x100000;
0184 #endif
0185
0186
0187
0188
0189
0190
0191 . = ALIGN(0x10000);
0192 __init_end = .;
0193
0194
0195
0196
0197
0198
0199 BSS_SECTION(0, 0x10000, 8)
0200
0201 _end = . ;
0202
0203
0204 .mdebug.abi32 : {
0205 KEEP(*(.mdebug.abi32))
0206 }
0207 .mdebug.abi64 : {
0208 KEEP(*(.mdebug.abi64))
0209 }
0210
0211
0212 .mdebug : {
0213 *(.mdebug)
0214 }
0215
0216 STABS_DEBUG
0217 DWARF_DEBUG
0218 ELF_DETAILS
0219
0220
0221 .gptab.sdata : {
0222 *(.gptab.data)
0223 *(.gptab.sdata)
0224 }
0225 .gptab.sbss : {
0226 *(.gptab.bss)
0227 *(.gptab.sbss)
0228 }
0229
0230
0231 DISCARDS
0232 /DISCARD/ : {
0233
0234 *(.MIPS.abiflags)
0235 *(.MIPS.options)
0236 *(.gnu.attributes)
0237 *(.options)
0238 *(.pdr)
0239 *(.reginfo)
0240 }
0241 }