Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /* -*- sh -*- */
  2. /*
  3. * Linker script for i386 images
  4. *
  5. */
  6. SECTIONS {
  7. /* Each section starts at a virtual address of zero.
  8. *
  9. * We guarantee alignment of virtual addresses to any alignment
  10. * specified by the constituent object files (e.g. via
  11. * __attribute__((aligned(x)))). Load addresses are guaranteed
  12. * only up to _max_align. Provided that all loader and relocation
  13. * code honours _max_align, this means that physical addresses are
  14. * also guaranteed up to _max_align.
  15. *
  16. * Note that when using -DKEEP_IT_REAL, the UNDI segments are only
  17. * guaranteed to be loaded on a paragraph boundary (i.e. 16-byte
  18. * alignment). Using _max_align>16 will therefore not guarantee
  19. * >16-byte alignment of physical addresses when -DKEEP_IT_REAL is
  20. * used (though virtual addresses will still be fully aligned).
  21. *
  22. */
  23. PROVIDE ( _max_align = 16 );
  24. /*
  25. * The prefix
  26. *
  27. */
  28. .prefix 0x0 : AT ( _prefix_lma ) {
  29. _prefix = .;
  30. *(.prefix)
  31. *(.prefix.*)
  32. _mprefix = .;
  33. } .bss.prefix (NOLOAD) : AT ( _end_lma ) {
  34. _eprefix = .;
  35. }
  36. _prefix_filesz = ABSOLUTE ( _mprefix ) - ABSOLUTE ( _prefix );
  37. _prefix_memsz = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix );
  38. /*
  39. * The 16-bit (real-mode) code section
  40. *
  41. */
  42. .text16.early 0x0 : AT ( _text16_early_lma ) {
  43. _text16 = .;
  44. KEEP(*(.text16.null))
  45. KEEP(*(.text16.null.*))
  46. . += 1; /* Prevent NULL being valid */
  47. *(.text16.early)
  48. *(.text16.early.*)
  49. _etext16_early = .;
  50. } .text16.late ALIGN ( _max_align ) : AT ( _text16_late_lma ) {
  51. _text16_late = .;
  52. *(.text16)
  53. *(.text16.*)
  54. _mtext16 = .;
  55. } .bss.text16 (NOLOAD) : AT ( _end_lma ) {
  56. _etext16 = .;
  57. }
  58. _text16_early_filesz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
  59. _text16_early_memsz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
  60. _text16_late_filesz = ABSOLUTE ( _mtext16 ) - ABSOLUTE ( _text16_late );
  61. _text16_late_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16_late );
  62. _text16_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 );
  63. /*
  64. * The 16-bit (real-mode) data section
  65. *
  66. */
  67. .data16 0x0 : AT ( _data16_lma ) {
  68. _data16 = .;
  69. . += 1; /* Prevent NULL being valid */
  70. *(.rodata16)
  71. *(.rodata16.*)
  72. *(.data16)
  73. *(.data16.*)
  74. _mdata16 = .;
  75. } .bss.data16 (NOLOAD) : AT ( _end_lma ) {
  76. *(.bss16)
  77. *(.bss16.*)
  78. *(.stack16)
  79. *(.stack16.*)
  80. _edata16 = .;
  81. }
  82. _data16_filesz = ABSOLUTE ( _mdata16 ) - ABSOLUTE ( _data16 );
  83. _data16_memsz = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 );
  84. /*
  85. * The 32-bit sections
  86. *
  87. */
  88. .textdata 0x0 : AT ( _textdata_lma ) {
  89. _textdata = .;
  90. KEEP(*(.text.null_trap))
  91. KEEP(*(.text.null_trap.*))
  92. . += 1; /* Prevent NULL being valid */
  93. *(.text)
  94. *(.text.*)
  95. *(.rodata)
  96. *(.rodata.*)
  97. *(.data)
  98. *(.data.*)
  99. KEEP(*(SORT(.tbl.*))) /* Various tables. See include/tables.h */
  100. _mtextdata = .;
  101. } .bss.textdata (NOLOAD) : AT ( _end_lma ) {
  102. *(.bss)
  103. *(.bss.*)
  104. *(COMMON)
  105. *(.stack)
  106. *(.stack.*)
  107. _etextdata = .;
  108. }
  109. _textdata_filesz = ABSOLUTE ( _mtextdata ) - ABSOLUTE ( _textdata );
  110. _textdata_memsz = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _textdata );
  111. /*
  112. * Compressor information block
  113. *
  114. */
  115. .zinfo 0x0 : AT ( _zinfo_lma ) {
  116. _zinfo = .;
  117. KEEP(*(.zinfo))
  118. KEEP(*(.zinfo.*))
  119. _mzinfo = .;
  120. } .bss.zinfo (NOLOAD) : AT ( _end_lma ) {
  121. _ezinfo = .;
  122. }
  123. _zinfo_filesz = ABSOLUTE ( _mzinfo ) - ABSOLUTE ( _zinfo );
  124. _zinfo_memsz = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _zinfo );
  125. /*
  126. * Weak symbols that need zero values if not otherwise defined
  127. *
  128. */
  129. .weak 0x0 : AT ( _end_lma ) {
  130. _weak = .;
  131. *(.weak)
  132. *(.weak.*)
  133. _eweak = .;
  134. }
  135. _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
  136. /*
  137. * Dispose of the comment and note sections to make the link map
  138. * easier to read
  139. *
  140. */
  141. /DISCARD/ : {
  142. *(.comment)
  143. *(.comment.*)
  144. *(.note)
  145. *(.note.*)
  146. *(.eh_frame)
  147. *(.eh_frame.*)
  148. *(.rel)
  149. *(.rel.*)
  150. *(.einfo)
  151. *(.einfo.*)
  152. *(.discard)
  153. *(.discard.*)
  154. }
  155. /*
  156. * Load address calculations. In older versions of ld, ALIGN()
  157. * can operate only on the location counter, so we use that.
  158. *
  159. */
  160. . = 0;
  161. . = ALIGN ( _max_align );
  162. _prefix_lma = .;
  163. . += _prefix_filesz;
  164. . = ALIGN ( _max_align );
  165. _text16_early_lma = .;
  166. . += _text16_early_filesz;
  167. . = ALIGN ( _max_align );
  168. _payload_lma = .;
  169. _text16_late_lma = .;
  170. . += _text16_late_filesz;
  171. . = ALIGN ( _max_align );
  172. _data16_lma = .;
  173. . += _data16_filesz;
  174. . = ALIGN ( _max_align );
  175. _textdata_lma = .;
  176. . += _textdata_filesz;
  177. _filesz = .; /* Do not include zinfo block in file size */
  178. . = ALIGN ( _max_align );
  179. _zinfo_lma = .;
  180. . += _zinfo_filesz;
  181. . = ALIGN ( _max_align );
  182. _end_lma = .;
  183. /*
  184. * Values calculated to save code from doing it
  185. *
  186. */
  187. _text16_memsz_pgh = ( ( _text16_memsz + 15 ) / 16 );
  188. _data16_memsz_pgh = ( ( _data16_memsz + 15 ) / 16 );
  189. _textdata_memsz_pgh = ( ( _textdata_memsz + 15 ) / 16 );
  190. _textdata_memsz_kb = ( ( _textdata_memsz + 1023 ) / 1024 );
  191. }