ddrinit.lds 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /* Copyright (c) 2020 StarFiveTech, Inc */
  3. OUTPUT_ARCH( "riscv" )
  4. MEMORY
  5. {
  6. ram (rwx) : ORIGIN = 0x18080000, LENGTH = 192K
  7. }
  8. ENTRY( _start )
  9. PHDRS
  10. {
  11. text PT_LOAD;
  12. rodata PT_LOAD;
  13. data PT_LOAD;
  14. bss PT_LOAD;
  15. }
  16. SECTIONS
  17. {
  18. __stack_size = DEFINED(__stack_size) ? __stack_size : 4K;
  19. .init :
  20. {
  21. KEEP (*(SORT_NONE(.init)))
  22. } >ram AT>ram :text
  23. .text :
  24. {
  25. PROVIDE(_ftext = .);
  26. *(.text.unlikely .text.unlikely.*)
  27. *(.text.startup .text.startup.*)
  28. *(.text .text.*)
  29. *(.gnu.linkonce.t.*)
  30. PROVIDE (__etext = .);
  31. PROVIDE (_etext = .);
  32. PROVIDE (etext = .);
  33. }>ram AT>ram :text
  34. .rodata :
  35. {
  36. *(.rdata)
  37. *(.rodata .rodata.*)
  38. *(.gnu.linkonce.r.*)
  39. }>ram AT>ram :rodata
  40. .eh_frame :
  41. {
  42. *(.eh_frame)
  43. } >ram AT>ram :text
  44. .srodata :
  45. {
  46. *(.srodata.cst16)
  47. *(.srodata.cst8)
  48. *(.srodata.cst4)
  49. *(.srodata.cst2)
  50. *(.srodata.*)
  51. } >ram AT>ram :rodata
  52. .data :
  53. {
  54. *(.data .data.* .gnu.linkonce.d.*)
  55. . = ALIGN(8);
  56. PROVIDE( __global_pointer$ = . + 0x800 );
  57. *(.tohost) /* TODO: Support sections that aren't explicitly listed in this linker script */
  58. } >ram :data
  59. .sdata :
  60. {
  61. *(.sdata .sdata.* .gnu.linkonce.s.*)
  62. } >ram AT>ram :data
  63. PROVIDE(_data = ADDR(.data));
  64. PROVIDE(_data_lma = LOADADDR(.data));
  65. PROVIDE( _edata = . );
  66. . = ALIGN(8);
  67. PROVIDE( _bss_start = . );
  68. .bss :
  69. {
  70. *(.sbss*)
  71. *(.gnu.linkonce.sb.*)
  72. *(.bss .bss.*)
  73. *(.gnu.linkonce.b.*)
  74. *(COMMON)
  75. . = ALIGN(8);
  76. PROVIDE(_ebss = .);
  77. } >ram AT>ram :bss
  78. PROVIDE( _end = . );
  79. PROVIDE( _bss_end = . );
  80. /*
  81. * heap_stack_region_usable_end: (ORIGIN(ram) + LENGTH(ram))
  82. * heap_stack_min_size: 4096
  83. * heap_stack_max_size: 8292
  84. */
  85. PROVIDE(_sp = ALIGN(MIN((ORIGIN(ram) + LENGTH(ram)), _bss_end + 8292) - 7, 8));
  86. /*
  87. * Protect top of stack from heap, but this will not protect the heap from
  88. * stack overruns.
  89. */
  90. PROVIDE(_heap_end = _sp - 0x100);
  91. .stack :
  92. {
  93. ASSERT(_sp >= (_bss_end + 4096), "Error: No room left for the heap and stack");
  94. }
  95. }