shim.lds 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. .hash : { *(.hash) }
  10. .gnu.hash : { *(.gnu.hash) }
  11. .dynsym : { *(.dynsym) }
  12. .dynstr : { *(.dynstr) }
  13. .gnu.version : { *(.gnu.version) }
  14. .gnu.version_d : { *(.gnu.version_d) }
  15. .gnu.version_r : { *(.gnu.version_r) }
  16. .rela.dyn :
  17. {
  18. *(.rela.init)
  19. *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
  20. *(.rela.fini)
  21. *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
  22. *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
  23. *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
  24. *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
  25. *(.rela.ctors)
  26. *(.rela.dtors)
  27. *(.rela.got)
  28. *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
  29. *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*)
  30. *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*)
  31. *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*)
  32. *(.rela.ifunc)
  33. }
  34. .rela.plt :
  35. {
  36. *(.rela.plt)
  37. *(.rela.iplt)
  38. }
  39. .init : { *(.init) }
  40. .plt : { *(.plt) *(.iplt) }
  41. .text :
  42. {
  43. /* the rest of text segments */
  44. __code_address = .;
  45. *(.text .stub .text.*);
  46. . = ALIGN(8);
  47. __cp_name = .;
  48. SORT(*)(SORT(.cp_name.*));
  49. __cp_func = .;
  50. SORT(*)(SORT(.cp_func.*));
  51. __rs_func = .;
  52. SORT(*)(SORT(.rs_func.*));
  53. __code_address_end = .;
  54. }
  55. .fini : { *(.fini) }
  56. .rodata :
  57. {
  58. /* the rest of rodata */
  59. *(.rodata .rodata.*)
  60. }
  61. .eh_frame_hdr : { *(.eh_frame_hdr) }
  62. .eh_frame : ONLY_IF_RO { *(.eh_frame) }
  63. /* now adjust the address for the data segment */
  64. . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
  65. .eh_frame : ONLY_IF_RW { *(.eh_frame) }
  66. .ctors : { *(.ctors) }
  67. .dtors : { *(.dtors) }
  68. .jcr : { *(.jcr) }
  69. .dynamic : { *(.dynamic) }
  70. .got : { *(.got) *(.igot) }
  71. .got.plt : { *(.got.plt) *(.igot.plt) }
  72. .data :
  73. {
  74. /* the rest of data segment */
  75. *(.data .data.*);
  76. . = ALIGN(64);
  77. __profile = .;
  78. *(SORT(.profile));
  79. __profile_end = .;
  80. . = ALIGN(CONSTANT(COMMONPAGESIZE));
  81. __migratable = .;
  82. *(.migratable);
  83. __migratable_end = .;
  84. . = ALIGN(CONSTANT(COMMONPAGESIZE));
  85. }
  86. .bss :
  87. {
  88. *(.bss .bss.*)
  89. *(COMMON)
  90. }
  91. __load_address_end = .;
  92. . = DATA_SEGMENT_END(.);
  93. }