shim.lds 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
  2. OUTPUT_ARCH(i386:x86-64)
  3. SECTIONS
  4. {
  5. /* Read-only sections, merged into text segment; */
  6. __load_address = .;
  7. . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
  8. .note.gnu.build-id : { *(.note.gnu.build-id) }
  9. .dynsym : { *(.dynsym) }
  10. .dynstr : { *(.dynstr) }
  11. .gnu.version : { *(.gnu.version) }
  12. .gnu.version_d : { *(.gnu.version_d) }
  13. .gnu.version_r : { *(.gnu.version_r) }
  14. .rela.dyn : { *(.rela.*) }
  15. .init : { KEEP(*(.init)) }
  16. .plt : { *(.plt) *(.iplt) }
  17. .text :
  18. {
  19. /* the rest of text segments */
  20. __code_address = .;
  21. *(.text .stub .text.*);
  22. . = ALIGN(8);
  23. __migrate_name = .;
  24. SORT(*)(SORT(.migrate_name.*));
  25. __migrate_func = .;
  26. SORT(*)(SORT(.migrate.*));
  27. __resume_func = .;
  28. SORT(*)(SORT(.resume.*));
  29. __code_address_end = .;
  30. }
  31. .fini : { KEEP(*(.fini)) }
  32. .rodata :
  33. {
  34. /* the rest of rodata */
  35. *(.rodata .rodata.*)
  36. }
  37. .eh_frame_hdr : { *(.eh_frame_hdr) }
  38. .eh_frame : ONLY_IF_RO { KEEP(*(.eh_frame)) }
  39. .hash : { *(.hash) }
  40. /* now adjust the address for the data segment */
  41. . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
  42. .eh_frame : ONLY_IF_RW { KEEP(*(.eh_frame)) }
  43. .ctors : { KEEP(*(.ctors)) }
  44. .dtors : { KEEP(*(.dtors)) }
  45. .jcr : { KEEP(*(.jcr)) }
  46. .dynamic : { *(.dynamic) }
  47. .got : { *(.got) *(.igot) }
  48. .got.plt : { *(.got.plt) *(.igot.plt) }
  49. .data :
  50. {
  51. /* the rest of data segment */
  52. *(.data .data.*);
  53. . = ALIGN(64);
  54. __profile = .;
  55. *(SORT(.profile));
  56. __profile_end = .;
  57. . = ALIGN(CONSTANT(COMMONPAGESIZE));
  58. __migratable = .;
  59. *(.migratable);
  60. __migratable_end = .;
  61. . = ALIGN(CONSTANT(COMMONPAGESIZE));
  62. }
  63. .bss :
  64. {
  65. *(.bss .bss.*)
  66. *(COMMON)
  67. }
  68. __load_address_end = .;
  69. . = DATA_SEGMENT_END(.);
  70. }