link.x 1.7 KB

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