linker.ld 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include <AK/Platform.h>
  2. ENTRY(init)
  3. #define PF_X 0x1
  4. #define PF_W 0x2
  5. #define PF_R 0x4
  6. PHDRS
  7. {
  8. elf_headers PT_LOAD FILEHDR PHDRS FLAGS(PF_R) ;
  9. super_pages PT_LOAD FLAGS(PF_R | PF_W) ;
  10. text PT_LOAD FLAGS(PF_R | PF_X) ;
  11. data PT_LOAD FLAGS(PF_R | PF_W) ;
  12. bss PT_LOAD FLAGS(PF_R | PF_W) ;
  13. dynamic_segment PT_LOAD FLAGS(PF_R | PF_W) ;
  14. dynamic PT_DYNAMIC FLAGS(PF_R | PF_W) ;
  15. ksyms PT_LOAD FLAGS(PF_R) ;
  16. }
  17. SECTIONS
  18. {
  19. start_of_kernel_image = .;
  20. .elf_headers (SIZEOF_HEADERS) : AT (ADDR(.elf_headers) + SIZEOF_HEADERS)
  21. {
  22. start_of_elf_headers = .;
  23. } :elf_headers
  24. .super_pages ALIGN(4K) (NOLOAD) : AT (ADDR(.super_pages))
  25. {
  26. *(.super_pages)
  27. } :super_pages
  28. .text ALIGN(4K) : AT (ADDR(.text))
  29. {
  30. start_of_kernel_text = .;
  31. start_of_safemem_text = .;
  32. KEEP(*(.text.safemem))
  33. end_of_safemem_text = .;
  34. start_of_safemem_atomic_text = .;
  35. KEEP(*(.text.safemem.atomic))
  36. end_of_safemem_atomic_text = .;
  37. *(.text*)
  38. } :text
  39. .unmap_after_init ALIGN(4K) : AT (ADDR(.unmap_after_init))
  40. {
  41. start_of_unmap_after_init = .;
  42. *(.unmap_after_init*);
  43. end_of_unmap_after_init = .;
  44. end_of_kernel_text = .;
  45. } :text
  46. .rodata ALIGN(4K) : AT (ADDR(.rodata))
  47. {
  48. start_heap_ctors = .;
  49. *libkernel_heap.a:*(.ctors)
  50. end_heap_ctors = .;
  51. start_ctors = .;
  52. *(.ctors)
  53. end_ctors = .;
  54. *(.rodata*)
  55. } :data
  56. .data ALIGN(4K) : AT (ADDR(.data))
  57. {
  58. start_of_kernel_data = .;
  59. *(.data*)
  60. end_of_kernel_data = .;
  61. } :data
  62. .ro_after_init ALIGN(4K) (NOLOAD) : AT(ADDR(.ro_after_init))
  63. {
  64. start_of_ro_after_init = .;
  65. *(.ro_after_init);
  66. end_of_ro_after_init = .;
  67. } :data
  68. .bss ALIGN(4K) (NOLOAD) : AT (ADDR(.bss))
  69. {
  70. start_of_kernel_bss = .;
  71. *(page_tables)
  72. *(COMMON)
  73. *(.bss)
  74. end_of_kernel_bss = .;
  75. . = ALIGN(4K);
  76. *(.heap)
  77. } :bss
  78. .dynamic ALIGN(4K) : AT (ADDR(.dynamic))
  79. {
  80. *(.dynamic)
  81. } :dynamic_segment :dynamic
  82. .ksyms ALIGN(4K) : AT (ADDR(.ksyms))
  83. {
  84. start_of_kernel_ksyms = .;
  85. *(.kernel_symbols)
  86. end_of_kernel_ksyms = .;
  87. } :ksyms
  88. end_of_kernel_image = .;
  89. }