boot.ld 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*======================================================================*/
  2. /* Proxy kernel linker script */
  3. /*======================================================================*/
  4. /* This is the linker script used when building the proxy kernel. */
  5. /*----------------------------------------------------------------------*/
  6. /* Setup */
  7. /*----------------------------------------------------------------------*/
  8. /* The OUTPUT_ARCH command specifies the machine architecture where the
  9. argument is one of the names used in the BFD library. More
  10. specifically one of the entires in bfd/cpu-mips.c */
  11. OUTPUT_ARCH( "riscv" )
  12. ENTRY(_start)
  13. /*----------------------------------------------------------------------*/
  14. /* Sections */
  15. /*----------------------------------------------------------------------*/
  16. SECTIONS
  17. {
  18. /* text: test code section */
  19. PROVIDE(__boot_addr = ROM_BASE);
  20. . = __boot_addr;
  21. .text.init : { *(.text.init) }
  22. .text : { *(.text*) }
  23. . = ALIGN(0x4);
  24. __text_end$ = .;
  25. . = ITIM_BASE; /* ITIM */
  26. /*
  27. .text.itim : AT (__text_end$ + __data_size + __sdata_size) {
  28. __itim_text_lma = LOADADDR(.text.itim);
  29. __itim_text_vma = .;
  30. *(.itim.text);
  31. }
  32. . = ALIGN(0x4);
  33. __itim_text_size = . - __itim_text_vma;
  34. */
  35. . = RAM_BASE;
  36. __stack_pointer$ = . + RAM_SIZE;
  37. . = ALIGN(0x1000);
  38. .tohost : { *(.tohost) }
  39. /* data segment */
  40. . = ALIGN(0x4);
  41. .data : AT ( __text_end$ ) {
  42. __data_lma = LOADADDR(.data);
  43. __data_vma = .;
  44. *(.data .data* .rodata*);
  45. }
  46. . = ALIGN(0x4);
  47. __data_size = . - __data_vma;
  48. .sdata : AT ( __text_end$ + __data_size ) {
  49. __sdata_lma = LOADADDR(.sdata);
  50. __sdata_vma = .;
  51. __global_pointer$ = . + 0x800;
  52. *(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata*)
  53. *(.sdata .sdata* .gnu.linkonce.s.*)
  54. }
  55. . = ALIGN(0x4);
  56. __sdata_size = . - __sdata_vma;
  57. /*
  58. .text.sram : AT (__text_end$ + __data_size + __sdata_size) {
  59. __sram_text_lma = LOADADDR(.text.sram);
  60. __sram_text_vma = .;
  61. *(.sram.text);
  62. }
  63. . = ALIGN(0x4);
  64. __sram_text_size = . - __sram_text_vma;
  65. */
  66. /* bss segment */
  67. .sbss : {
  68. __sbss_vma = .;
  69. *(.sbss .sbss.* .gnu.linkonce.sb.*)
  70. *(.scommon)
  71. }
  72. __sbss_size = . - __sbss_vma;
  73. .bss : {
  74. __bss_vma = .;
  75. *(.bss)
  76. }
  77. __bss_size = . - __bss_vma;
  78. /* thread-local data segment */
  79. /*
  80. .tdata :
  81. {
  82. _tls_data = .;
  83. *(.tdata.begin)
  84. *(.tdata)
  85. *(.tdata.end)
  86. }
  87. .tbss :
  88. {
  89. *(.tbss)
  90. *(.tbss.end)
  91. }
  92. */
  93. /* End of uninitalized data segement */
  94. _end = .;
  95. . = ALIGN(4);
  96. __malloc_start = .;
  97. }