section.ld 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. SECTIONS
  2. {
  3. .flash : ALIGN(4) {
  4. *(.flash);
  5. *(.flash.*);
  6. . = ALIGN(4);
  7. } >FLASH
  8. .text : ALIGN(4) {
  9. *(.text*)
  10. . = ALIGN(4);
  11. } >REGION_EXEC AT >REGION_TEXT
  12. __exec_text_lma = LOADADDR(.text);
  13. __exec_text_vma = ADDR(.text);
  14. __exec_text_size = __exec_text_lma == __exec_text_vma ? 0 : SIZEOF(.text);
  15. .preinit_array : ALIGN(4) {
  16. PROVIDE_HIDDEN (__preinit_array_start = .);
  17. KEEP (*(.preinit_array*))
  18. PROVIDE_HIDDEN (__preinit_array_end = .);
  19. } >REGION_EXEC AT >REGION_TEXT
  20. .init_array : ALIGN(4) {
  21. PROVIDE_HIDDEN (__init_array_start = .);
  22. KEEP (*(SORT(.init_array.*)))
  23. KEEP (*(.init_array*))
  24. PROVIDE_HIDDEN (__init_array_end = .);
  25. } >REGION_EXEC AT >REGION_TEXT
  26. .fini_array : ALIGN(4) {
  27. PROVIDE_HIDDEN (__fini_array_start = .);
  28. KEEP (*(SORT(.fini_array.*)))
  29. KEEP (*(.fini_array*))
  30. PROVIDE_HIDDEN (__fini_array_end = .);
  31. } >REGION_EXEC AT >REGION_TEXT
  32. .data : ALIGN(4) {
  33. *(.data*);
  34. *(.got*);
  35. . = ALIGN(4);
  36. } >REGION_DATA AT >REGION_TEXT
  37. __data_lma = LOADADDR(.data);
  38. __data_vma = ADDR(.data);
  39. __data_size = __data_lma == __data_vma ? 0 : SIZEOF(.data);
  40. .rodata : ALIGN(4) {
  41. *(.rodata*);
  42. . = ALIGN(4);
  43. } >REGION_RODATA AT >REGION_TEXT
  44. __rodata_lma = LOADADDR(.rodata);
  45. __rodata_vma = ADDR(.rodata);
  46. __rodata_size = __rodata_lma == __rodata_vma ? 0 : SIZEOF(.rodata);
  47. .sdata : ALIGN(4) {
  48. __global_pointer$ = . + 0x800;
  49. *(.sdata* .srodata*)
  50. . = ALIGN(4);
  51. } >REGION_DATA AT >REGION_TEXT
  52. __sdata_lma = LOADADDR(.sdata);
  53. __sdata_vma = ADDR(.sdata);
  54. __sdata_size = __sdata_lma == __sdata_vma ? 0 : SIZEOF(.sdata);
  55. /* bss segment */
  56. .bss : ALIGN(4) {
  57. *(.bss*)
  58. *(COMMON)
  59. . = ALIGN(4);
  60. } >REGION_DATA
  61. __bss_vma = ADDR(.bss);
  62. __bss_size = SIZEOF(.bss);
  63. .sbss : ALIGN(4) {
  64. *(.sbss*)
  65. . = ALIGN(4);
  66. } >REGION_DATA
  67. __sbss_vma = ADDR(.sbss);
  68. __sbss_size = SIZEOF(.sbss);
  69. /* For uninitalized data in sram, use NOLOAD to reduce .bin size and avoid putting them in bss, which saves init time */
  70. .noinit (NOLOAD) : ALIGN(4) {
  71. *(.noinit*)
  72. . = ALIGN(4);
  73. } >REGION_DATA
  74. /* thread-local data segment */
  75. .tdata : ALIGN(4) {
  76. _tls_data = .;
  77. *(.tdata*)
  78. . = ALIGN(4);
  79. } >REGION_DATA AT >REGION_TEXT
  80. .tbss : ALIGN(4) {
  81. *(.tbss*)
  82. . = ALIGN(4);
  83. } >REGION_DATA
  84. /* End of uninitalized data segement */
  85. . = ALIGN(4);
  86. end = .;
  87. __malloc_start = .;
  88. PROVIDE(__stack_size = 0x1000);
  89. .stack : {
  90. ASSERT((__malloc_start + __stack_size < SRAM_BASE + SRAM_SIZE), "Error: Not enough SRAM for stack");
  91. }
  92. }