link.x 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. SECTIONS {
  2. .low 0x500 (NOLOAD) :
  3. {
  4. KEEP(*(.low .low*));
  5. } > LOWMEM
  6. .mbr 0xe00 :
  7. {
  8. KEEP(*(.mbr));
  9. /* avoid the MBR being overwritten */
  10. . = ABSOLUTE(ADDR(.mbr) + 446);
  11. /* avoid the MBR being overwritten */
  12. . = ABSOLUTE(ADDR(.mbr) + 510);
  13. BYTE(0x55);
  14. BYTE(0xaa);
  15. } > LOWMEM = 0x00
  16. .stage1 0x7000 :
  17. {
  18. KEEP(*(.stage1.smp));
  19. . = ALIGN(16);
  20. KEEP(*(.stage1));
  21. . = ABSOLUTE(ADDR(.stage1) + 512 * 7 - 4);
  22. STAGE1_MAGIC = .;
  23. LONG(ABSOLUTE(STAGE1_MAGIC_VALUE));
  24. STAGE1_MAGIC_VALUE = 0x01145140;
  25. } > LOWMEM AT> LOWMEM
  26. }
  27. SECTIONS {
  28. .text.syscall_fns :
  29. {
  30. KEEP(*(.syscall_fns*));
  31. } > REGION_TEXT
  32. }
  33. INSERT AFTER .text;
  34. SECTIONS {
  35. .rodata.fixups :
  36. {
  37. . = ALIGN(16);
  38. FIX_START = .;
  39. KEEP(*(.fix));
  40. FIX_END = .;
  41. } > REGION_RODATA
  42. .rodata.syscalls :
  43. {
  44. . = ALIGN(16);
  45. __raw_syscall_handlers_start = .;
  46. RAW_SYSCALL_HANDLERS = .;
  47. KEEP(*(.raw_syscalls*));
  48. __raw_syscall_handlers_end = .;
  49. RAW_SYSCALL_HANDLERS_SIZE =
  50. ABSOLUTE(__raw_syscall_handlers_end - __raw_syscall_handlers_start);
  51. } > REGION_RODATA
  52. }
  53. INSERT AFTER .rodata;
  54. SECTIONS {
  55. .percpu : ALIGN(16)
  56. {
  57. __spercpu = .;
  58. PERCPU_START = .;
  59. QUAD(0); /* Reserved for x86 percpu pointer */
  60. . = ALIGN(16);
  61. *(.percpu .percpu*);
  62. . = ALIGN(16);
  63. __epercpu = .;
  64. } > KPERCPU AT> REGION_RODATA
  65. PERCPU_DATA_START = LOADADDR(.percpu);
  66. PERCPU_LENGTH = ABSOLUTE(__epercpu - __spercpu);
  67. KIMAGE_PAGES = (__edata - _stext + 0x1000 - 1) / 0x1000;
  68. KIMAGE_32K_COUNT = (KIMAGE_PAGES + 8 - 1) / 8;
  69. }
  70. INSERT AFTER .rodata;