1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2012 Regents of the University of California 4 * Copyright (C) 2017 SiFive 5 */ 6 7#define LOAD_OFFSET PAGE_OFFSET 8#include <asm/vmlinux.lds.h> 9#include <asm/page.h> 10#include <asm/cache.h> 11#include <asm/thread_info.h> 12#include <asm/set_memory.h> 13#include "image-vars.h" 14 15#include <linux/sizes.h> 16OUTPUT_ARCH(riscv) 17ENTRY(_start) 18 19jiffies = jiffies_64; 20 21PECOFF_SECTION_ALIGNMENT = 0x1000; 22PECOFF_FILE_ALIGNMENT = 0x200; 23 24SECTIONS 25{ 26 /* Beginning of code and text segment */ 27 . = LOAD_OFFSET; 28 _start = .; 29 HEAD_TEXT_SECTION 30 . = ALIGN(PAGE_SIZE); 31 32 __init_begin = .; 33 INIT_TEXT_SECTION(PAGE_SIZE) 34 . = ALIGN(8); 35 __soc_early_init_table : { 36 __soc_early_init_table_start = .; 37 KEEP(*(__soc_early_init_table)) 38 __soc_early_init_table_end = .; 39 } 40 __soc_builtin_dtb_table : { 41 __soc_builtin_dtb_table_start = .; 42 KEEP(*(__soc_builtin_dtb_table)) 43 __soc_builtin_dtb_table_end = .; 44 } 45 /* we have to discard exit text and such at runtime, not link time */ 46 .exit.text : 47 { 48 EXIT_TEXT 49 } 50 .exit.data : 51 { 52 EXIT_DATA 53 } 54 PERCPU_SECTION(L1_CACHE_BYTES) 55 __init_end = .; 56 57 . = ALIGN(SECTION_ALIGN); 58 .text : { 59 _text = .; 60 _stext = .; 61 TEXT_TEXT 62 SCHED_TEXT 63 CPUIDLE_TEXT 64 LOCK_TEXT 65 KPROBES_TEXT 66 ENTRY_TEXT 67 IRQENTRY_TEXT 68 SOFTIRQENTRY_TEXT 69 *(.fixup) 70 _etext = .; 71 } 72 73#ifdef CONFIG_EFI 74 . = ALIGN(PECOFF_SECTION_ALIGNMENT); 75 __pecoff_text_end = .; 76#endif 77 78 INIT_DATA_SECTION(16) 79 80 /* Start of data section */ 81 _sdata = .; 82 RO_DATA(SECTION_ALIGN) 83 .srodata : { 84 *(.srodata*) 85 } 86 87 EXCEPTION_TABLE(0x10) 88 89 . = ALIGN(SECTION_ALIGN); 90 _data = .; 91 92 RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) 93 .sdata : { 94 __global_pointer$ = . + 0x800; 95 *(.sdata*) 96 } 97 98#ifdef CONFIG_EFI 99 .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); } 100 __pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end); 101#endif 102 103 /* End of data section */ 104 _edata = .; 105 106 BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0) 107 108 .rel.dyn : { 109 *(.rel.dyn*) 110 } 111 112#ifdef CONFIG_EFI 113 . = ALIGN(PECOFF_SECTION_ALIGNMENT); 114 __pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end); 115#endif 116 _end = .; 117 118 STABS_DEBUG 119 DWARF_DEBUG 120 ELF_DETAILS 121 122 DISCARDS 123} 124