vmlinux.lds.S 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <linux/sizes.h>
  3. #include <asm/asm-offsets.h>
  4. #include <asm/thread_info.h>
  5. #include <asm/orc_lookup.h>
  6. #define PAGE_SIZE _PAGE_SIZE
  7. #define RO_EXCEPTION_TABLE_ALIGN 4
  8. #define PHYSADDR_MASK 0xffffffffffff /* 48-bit */
  9. /*
  10. * Put .bss..swapper_pg_dir as the first thing in .bss. This will
  11. * ensure that it has .bss alignment (64K).
  12. */
  13. #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
  14. #include <asm-generic/vmlinux.lds.h>
  15. #include "image-vars.h"
  16. /*
  17. * Max avaliable Page Size is 64K, so we set SectionAlignment
  18. * field of EFI application to 64K.
  19. */
  20. PECOFF_FILE_ALIGN = 0x200;
  21. PECOFF_SEGMENT_ALIGN = 0x10000;
  22. OUTPUT_ARCH(loongarch)
  23. ENTRY(kernel_entry)
  24. PHDRS {
  25. text PT_LOAD FLAGS(7); /* RWX */
  26. note PT_NOTE FLAGS(4); /* R__ */
  27. }
  28. jiffies = jiffies_64;
  29. SECTIONS
  30. {
  31. . = VMLINUX_LOAD_ADDRESS;
  32. _text = .;
  33. HEAD_TEXT_SECTION
  34. . = ALIGN(PECOFF_SEGMENT_ALIGN);
  35. _stext = .;
  36. .text : {
  37. TEXT_TEXT
  38. SCHED_TEXT
  39. LOCK_TEXT
  40. KPROBES_TEXT
  41. IRQENTRY_TEXT
  42. SOFTIRQENTRY_TEXT
  43. *(.fixup)
  44. *(.gnu.warning)
  45. } :text = 0
  46. . = ALIGN(PECOFF_SEGMENT_ALIGN);
  47. _etext = .;
  48. . = ALIGN(PECOFF_SEGMENT_ALIGN);
  49. __init_begin = .;
  50. __inittext_begin = .;
  51. INIT_TEXT_SECTION(PAGE_SIZE)
  52. .exit.text : {
  53. EXIT_TEXT
  54. }
  55. . = ALIGN(PECOFF_SEGMENT_ALIGN);
  56. __inittext_end = .;
  57. __initdata_begin = .;
  58. /*
  59. * struct alt_inst entries. From the header (alternative.h):
  60. * "Alternative instructions for different CPU types or capabilities"
  61. * Think locking instructions on spinlocks.
  62. */
  63. . = ALIGN(4);
  64. .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
  65. __alt_instructions = .;
  66. *(.altinstructions)
  67. __alt_instructions_end = .;
  68. }
  69. INIT_DATA_SECTION(16)
  70. .exit.data : {
  71. EXIT_DATA
  72. }
  73. #ifdef CONFIG_SMP
  74. PERCPU_SECTION(1 << CONFIG_L1_CACHE_SHIFT)
  75. #endif
  76. .init.bss : {
  77. *(.init.bss)
  78. }
  79. . = ALIGN(PECOFF_SEGMENT_ALIGN);
  80. __initdata_end = .;
  81. __init_end = .;
  82. _sdata = .;
  83. RO_DATA(4096)
  84. .got : ALIGN(16) { *(.got) }
  85. .plt : ALIGN(16) { *(.plt) }
  86. .got.plt : ALIGN(16) { *(.got.plt) }
  87. RW_DATA(1 << CONFIG_L1_CACHE_SHIFT, PAGE_SIZE, THREAD_SIZE)
  88. .rela.dyn : ALIGN(8) {
  89. __rela_dyn_begin = .;
  90. *(.rela.dyn) *(.rela*)
  91. __rela_dyn_end = .;
  92. }
  93. #ifdef CONFIG_RELR
  94. .relr.dyn : ALIGN(8) {
  95. __relr_dyn_begin = .;
  96. *(.relr.dyn)
  97. __relr_dyn_end = .;
  98. }
  99. #endif
  100. .data.rel : { *(.data.rel*) }
  101. #ifdef CONFIG_RELOCATABLE
  102. . = ALIGN(8);
  103. .la_abs : AT(ADDR(.la_abs) - LOAD_OFFSET) {
  104. __la_abs_begin = .;
  105. *(.la_abs)
  106. __la_abs_end = .;
  107. }
  108. #endif
  109. ORC_UNWIND_TABLE
  110. .sdata : {
  111. *(.sdata)
  112. }
  113. .edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGN); }
  114. _edata = .;
  115. BSS_SECTION(0, SZ_64K, 8)
  116. . = ALIGN(PECOFF_SEGMENT_ALIGN);
  117. _end = .;
  118. STABS_DEBUG
  119. DWARF_DEBUG
  120. ELF_DETAILS
  121. #ifdef CONFIG_EFI_STUB
  122. /* header symbols */
  123. _kernel_entry = ABSOLUTE(kernel_entry & PHYSADDR_MASK);
  124. _kernel_asize = ABSOLUTE(_end - _text);
  125. _kernel_fsize = ABSOLUTE(_edata - _text);
  126. _kernel_vsize = ABSOLUTE(_end - __initdata_begin);
  127. _kernel_rsize = ABSOLUTE(_edata - __initdata_begin);
  128. #endif
  129. .gptab.sdata : {
  130. *(.gptab.data)
  131. *(.gptab.sdata)
  132. }
  133. .gptab.sbss : {
  134. *(.gptab.bss)
  135. *(.gptab.sbss)
  136. }
  137. DISCARDS
  138. /DISCARD/ : {
  139. *(.dynamic .dynsym .dynstr .hash .gnu.hash)
  140. *(.gnu.attributes)
  141. *(.options)
  142. *(.eh_frame)
  143. }
  144. }