• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* SPDX-License-Identifier: GPL-2.0 */
2#include <asm-generic/vmlinux.lds.h>
3#include <asm/page.h>
4#include <asm/cache.h>
5#include <asm/thread_info.h>
6#include <hv/hypervisor.h>
7
8/* Text loads starting from the supervisor interrupt vector address. */
9#define TEXT_OFFSET MEM_SV_START
10
11OUTPUT_ARCH(tile)
12ENTRY(_start)
13jiffies = jiffies_64;
14
15PHDRS
16{
17  intrpt PT_LOAD ;
18  text PT_LOAD ;
19  data PT_LOAD ;
20}
21SECTIONS
22{
23  /* Text is loaded with a different VA than data; start with text. */
24  #undef LOAD_OFFSET
25  #define LOAD_OFFSET TEXT_OFFSET
26
27  /* Interrupt vectors */
28  .intrpt (LOAD_OFFSET) : AT ( 0 )   /* put at the start of physical memory */
29  {
30    _text = .;
31    *(.intrpt)
32  } :intrpt =0
33
34  /* Hypervisor call vectors */
35  . = ALIGN(0x10000);
36  .hvglue : AT (ADDR(.hvglue) - LOAD_OFFSET) {
37    *(.hvglue)
38  } :NONE
39
40  /* Now the real code */
41  . = ALIGN(0x20000);
42  _stext = .;
43  .text : AT (ADDR(.text) - LOAD_OFFSET) {
44    HEAD_TEXT
45    SCHED_TEXT
46    CPUIDLE_TEXT
47    LOCK_TEXT
48    KPROBES_TEXT
49    IRQENTRY_TEXT
50    SOFTIRQENTRY_TEXT
51    __fix_text_end = .;   /* tile-cpack won't rearrange before this */
52    ALIGN_FUNCTION();
53    *(.hottext*)
54    TEXT_TEXT
55    *(.text.*)
56    *(.coldtext*)
57    *(.fixup)
58    *(.gnu.warning)
59  } :text =0
60  _etext = .;
61
62  /* "Init" is divided into two areas with very different virtual addresses. */
63  INIT_TEXT_SECTION(PAGE_SIZE)
64
65  /*
66   * Some things, like the __jump_table, may contain symbol references
67   * to __exit text, so include such text in the final image if so.
68   * In that case we also override the _einittext from INIT_TEXT_SECTION.
69   */
70#ifdef CONFIG_JUMP_LABEL
71  .exit.text : {
72    EXIT_TEXT
73    _einittext = .;
74  }
75#endif
76
77  /* Now we skip back to PAGE_OFFSET for the data. */
78  . = (. - TEXT_OFFSET + PAGE_OFFSET);
79  #undef LOAD_OFFSET
80  #define LOAD_OFFSET PAGE_OFFSET
81
82  . = ALIGN(PAGE_SIZE);
83  __init_begin = .;
84  INIT_DATA_SECTION(16) :data =0
85  PERCPU_SECTION(L2_CACHE_BYTES)
86  . = ALIGN(PAGE_SIZE);
87  __init_end = .;
88
89  _sdata = .;                   /* Start of data section */
90  RO_DATA_SECTION(PAGE_SIZE)
91  RW_DATA_SECTION(L2_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
92  _edata = .;
93
94  EXCEPTION_TABLE(L2_CACHE_BYTES)
95  NOTES
96
97
98  BSS_SECTION(8, PAGE_SIZE, 1)
99  _end = . ;
100
101  STABS_DEBUG
102  DWARF_DEBUG
103
104  DISCARDS
105}
106