linker.ld 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv")
  2. OUTPUT_ARCH(riscv)
  3. ENTRY(_start)
  4. STACK_SIZE = 0x100000;
  5. MEMORY
  6. {
  7. ram : org = 0x40000000, len = 48M
  8. }
  9. SECTIONS
  10. {
  11. .text :
  12. {
  13. PROVIDE(__image_start = .);
  14. PROVIDE(__text_start = .);
  15. PROVIDE(__spl_start = .);
  16. start.o (.text*)
  17. *libgcc.a:*.o (.text*)
  18. memcpy.o (.text*)
  19. memset.o (.text*)
  20. . = ALIGN(8);
  21. PROVIDE(__spl_end = .);
  22. *(.text*)
  23. *(.init.text)
  24. *(.exit.text)
  25. *(.iplt)
  26. *(.note.gnu.build-id)
  27. PROVIDE(__text_end = .);
  28. } > ram
  29. PROVIDE(__spl_size = __spl_end - __spl_start);
  30. .initcall ALIGN(8) :
  31. {
  32. PROVIDE(__init_array_start = .);
  33. PROVIDE(__initcall_start = .);
  34. KEEP(*(.initcall_0.text))
  35. KEEP(*(.initcall_1.text))
  36. KEEP(*(.initcall_2.text))
  37. KEEP(*(.initcall_3.text))
  38. KEEP(*(.initcall_4.text))
  39. KEEP(*(.initcall_5.text))
  40. KEEP(*(.initcall_6.text))
  41. KEEP(*(.initcall_7.text))
  42. KEEP(*(.initcall_8.text))
  43. KEEP(*(.initcall_9.text))
  44. PROVIDE(__init_array_end = .);
  45. PROVIDE(__initcall_end = .);
  46. } > ram
  47. .exitcall ALIGN(8) :
  48. {
  49. PROVIDE(__exitcall_start = .);
  50. KEEP(*(.exitcall_9.text))
  51. KEEP(*(.exitcall_8.text))
  52. KEEP(*(.exitcall_7.text))
  53. KEEP(*(.exitcall_6.text))
  54. KEEP(*(.exitcall_5.text))
  55. KEEP(*(.exitcall_4.text))
  56. KEEP(*(.exitcall_3.text))
  57. KEEP(*(.exitcall_2.text))
  58. KEEP(*(.exitcall_1.text))
  59. KEEP(*(.exitcall_0.text))
  60. PROVIDE(__exitcall_end = .);
  61. } > ram
  62. .ksymtab ALIGN(16) :
  63. {
  64. PROVIDE(__ksymtab_start = .);
  65. KEEP(*(.ksymtab.text))
  66. PROVIDE(__ksymtab_end = .);
  67. } > ram
  68. .rodata ALIGN(8) :
  69. {
  70. PROVIDE(__rodata_start = .);
  71. *(.rodata*)
  72. *(.srodata*)
  73. PROVIDE(__rodata_end = .);
  74. } > ram
  75. .data ALIGN(8) :
  76. {
  77. PROVIDE(__data_start = .);
  78. PROVIDE(__global_pointer$ = . + 0x800);
  79. *(.sdata*)
  80. *(.data*)
  81. . = ALIGN(8);
  82. PROVIDE(__data_end = .);
  83. PROVIDE(__image_end = .);
  84. } > ram
  85. .bss ALIGN(8) (NOLOAD) :
  86. {
  87. PROVIDE(__bss_start = .);
  88. *(.bss*)
  89. *(.sbss*)
  90. *(COMMON)
  91. . = ALIGN(8);
  92. PROVIDE(__bss_end = .);
  93. } > ram
  94. .stack ALIGN(16) (NOLOAD) :
  95. {
  96. PROVIDE(__stack_start = .);
  97. . += STACK_SIZE;
  98. . = ALIGN(16);
  99. PROVIDE(__stack_end = .);
  100. } > ram
  101. /DISCARD/ : { *(.dynsym) }
  102. /DISCARD/ : { *(.dynstr*) }
  103. /DISCARD/ : { *(.dynamic*) }
  104. /DISCARD/ : { *(.plt*) }
  105. /DISCARD/ : { *(.interp*) }
  106. /DISCARD/ : { *(.gnu*) }
  107. }