link.x 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. SECTIONS {
  2. .bootstrap ORIGIN(RAM) :
  3. {
  4. KEEP(*(.bootstrap.entry .bootstrap.data));
  5. . = ORIGIN(RAM) + 0x1000;
  6. KEEP(*(.bootstrap.page_table.1));
  7. KEEP(*(.bootstrap.page_table.2));
  8. . = ALIGN(16);
  9. KEEP(*(.bootstrap.stack));
  10. } > RAM
  11. }
  12. INSERT BEFORE .text;
  13. SECTIONS {
  14. .text.syscall_fns :
  15. {
  16. KEEP(*(.syscall_fns*));
  17. } > REGION_TEXT AT> RAM
  18. }
  19. INSERT AFTER .text;
  20. SECTIONS {
  21. .percpu : ALIGN(16)
  22. {
  23. __spercpu = .;
  24. PERCPU_DATA_START = .;
  25. . = ALIGN(16);
  26. *(.percpu .percpu*);
  27. . = ALIGN(16);
  28. __epercpu = .;
  29. } > REGION_RODATA AT> RAM
  30. PERCPU_LENGTH = ABSOLUTE(__epercpu - __spercpu);
  31. KIMAGE_PAGES = (__edata - _stext + 0x1000 - 1) / 0x1000;
  32. KIMAGE_32K_COUNT = (KIMAGE_PAGES + 8 - 1) / 8;
  33. __kernel_end = .;
  34. BSS_LENGTH = ABSOLUTE(__ebss - __sbss);
  35. }
  36. INSERT AFTER .rodata;
  37. SECTIONS {
  38. .rodata.syscalls :
  39. {
  40. . = ALIGN(16);
  41. __raw_syscall_handlers_start = .;
  42. RAW_SYSCALL_HANDLERS = .;
  43. KEEP(*(.raw_syscalls*));
  44. __raw_syscall_handlers_end = .;
  45. RAW_SYSCALL_HANDLERS_SIZE =
  46. ABSOLUTE(__raw_syscall_handlers_end - __raw_syscall_handlers_start);
  47. } > REGION_RODATA AT> RAM
  48. }
  49. INSERT AFTER .rodata;
  50. SECTIONS {
  51. .rodata.fixups :
  52. {
  53. . = ALIGN(16);
  54. FIX_START = .;
  55. KEEP(*(.fix));
  56. FIX_END = .;
  57. } > REGION_RODATA AT> RAM
  58. }
  59. INSERT AFTER .rodata;
  60. SECTIONS {
  61. .vdso ALIGN(0x1000) : ALIGN(0x1000)
  62. {
  63. KEEP(*(.vdso .vdso.*));
  64. . = ALIGN(0x1000);
  65. } > VDSO AT> RAM
  66. VDSO_PADDR = LOADADDR(.vdso);
  67. }
  68. INSERT AFTER .data;