linker.ld 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* This file is (C) 2023 Victor Suarez Rovere <suarezvictor@gmail.com>
  2. // SPDX-License-Identifier: BSD-2-Clause
  3. //
  4. // (C) Litex and Misoc developers
  5. // see LITEX_CONTRIBUTORS file for additional authors
  6. //
  7. */
  8. INCLUDE generated/output_format.ld
  9. ENTRY(_start)
  10. __DYNAMIC = 0;
  11. INCLUDE generated/regions.ld
  12. SECTIONS
  13. {
  14. .text :
  15. {
  16. _ftext = .;
  17. /* Make sure crt0 files come first, and they, and the isr */
  18. /* don't get disposed of by greedy optimisation */
  19. *crt0*(.text)
  20. KEEP(*crt0*(.text))
  21. *(.text .stub .text.* .gnu.linkonce.t.* .gnu.*lto*)
  22. _etext = .;
  23. } > main_ram
  24. .rodata :
  25. {
  26. . = ALIGN(8);
  27. _frodata = .;
  28. *(.rodata)
  29. *(.rodata.* .gnu.linkonce.r.*)
  30. *(.rodata1)
  31. . = ALIGN(8);
  32. _erodata = .;
  33. } > main_ram
  34. .data :
  35. {
  36. . = ALIGN(8);
  37. /* _fdata = .; */
  38. *(.data .data.* .gnu.linkonce.d.*)
  39. *(.data1)
  40. /* _gp = ALIGN(16); */
  41. *(.sdata .sdata.* .gnu.linkonce.s.*)
  42. . = ALIGN(8);
  43. /* _edata = .; */
  44. } > main_ram
  45. .fast_text :
  46. {
  47. . = ALIGN (8);
  48. _fast_text_loadaddr = LOADADDR(.fast_text);
  49. _fast_text = .;
  50. *(.fast_text)
  51. . = ALIGN (8);
  52. _efast_text = .;
  53. } > sram AT > main_ram
  54. .fast_data :
  55. {
  56. . = ALIGN (8);
  57. _fast_data_loadaddr = LOADADDR(.fast_data);
  58. _fast_data = .;
  59. *(.fast_data)
  60. _efast_data = .;
  61. } > sram AT > main_ram
  62. .bss : /* NOTE: this includes _end, so it must come at the end for correct malloc */
  63. {
  64. . = ALIGN(8);
  65. _fbss = .;
  66. *(.dynsbss)
  67. *(.sbss .sbss.* .gnu.linkonce.sb.*)
  68. *(.scommon)
  69. *(.dynbss)
  70. *(.bss .bss.* .gnu.linkonce.b.*)
  71. *(COMMON)
  72. . = ALIGN(8);
  73. _ebss = .;
  74. _end = .;
  75. } > main_ram
  76. }
  77. PROVIDE(_fstack = ORIGIN(sram) + LENGTH(sram) - 4);
  78. PROVIDE(_fdata_rom = LOADADDR(.data));
  79. PROVIDE(_edata_rom = LOADADDR(.data) + SIZEOF(.data));
  80. PROVIDE(_emain_ram = ORIGIN(main_ram) + LENGTH(main_ram));
  81. PROVIDE(__heap_start = ORIGIN(main_ram) + 0x01000000); /*skips video framebuffer, if any*/
  82. PROVIDE(__heap_end = ORIGIN(main_ram) + LENGTH(main_ram));