shim.lds 2.6 KB

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