link.ld 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. MEMORY {
  2. /* 存储单元的物理地址 */
  3. SRAM : ORIGIN = 0x80000000, LENGTH = 2M
  4. }
  5. PROVIDE(_stext = 0x80000000);
  6. PROVIDE(_heap_size = 128K);
  7. PROVIDE(_hart_stack_size = 64K);
  8. PROVIDE(_max_hart_id = 7); /* todo */
  9. REGION_ALIAS("REGION_TEXT", SRAM);
  10. REGION_ALIAS("REGION_RODATA", SRAM);
  11. REGION_ALIAS("REGION_DATA", SRAM);
  12. REGION_ALIAS("REGION_BSS", SRAM);
  13. REGION_ALIAS("REGION_HEAP", SRAM);
  14. REGION_ALIAS("REGION_STACK", SRAM);
  15. OUTPUT_ARCH(riscv)
  16. ENTRY(_start)
  17. PROVIDE(_stack_start = ORIGIN(REGION_STACK) + LENGTH(REGION_STACK));
  18. SECTIONS
  19. {
  20. /* .text 字段 */
  21. .text _stext : {
  22. /* 把 entry 函数放在最前面 */
  23. *(.text.entry)
  24. /* 要链接的文件的 .text 字段集中放在这里 */
  25. *(.text .text.*)
  26. _etext = .;
  27. } > REGION_TEXT
  28. /* .rodata 字段 */
  29. .rodata : ALIGN(4) {
  30. _srodata = .;
  31. /* 要链接的文件的 .rodata 字段集中放在这里 */
  32. *(.rodata .rodata.*)
  33. . = ALIGN(4);
  34. _erodata = .;
  35. } > REGION_RODATA
  36. /* .data 字段 */
  37. .data : ALIGN(4) {
  38. _sidata = LOADADDR(.data);
  39. _sdata = .;
  40. /* Must be called __global_pointer$ for linker relaxations to work. */
  41. PROVIDE(__global_pointer$ = . + 0x800);
  42. /* 要链接的文件的 .data 字段集中放在这里 */
  43. *(.sdata .sdata.* .sdata2 .sdata2.*);
  44. *(.data .data.*)
  45. . = ALIGN(4);
  46. _edata = .;
  47. } > REGION_DATA
  48. /* .bss 字段 */
  49. .bss (NOLOAD) : {
  50. _sbss = .;
  51. /* 要链接的文件的 .bss 字段集中放在这里 */
  52. *(.sbss .bss .bss.*)
  53. . = ALIGN(4);
  54. _ebss = .;
  55. } > REGION_BSS
  56. .heap (NOLOAD) : {
  57. _sheap = .;
  58. . += _heap_size;
  59. . = ALIGN(4);
  60. _eheap = .;
  61. } > REGION_HEAP
  62. /* fictitious region that represents the memory available for the stack */
  63. .stack (NOLOAD) : {
  64. _estack = .;
  65. . = _stack_start;
  66. . = ALIGN(4);
  67. _sstack = .;
  68. } > REGION_STACK
  69. /* Discard .eh_frame, we are not doing unwind on panic so it is not needed */
  70. /DISCARD/ :
  71. {
  72. *(.eh_frame .eh_frame_hdr);
  73. }
  74. }