0009-bios-Don-t-try-to-guess-the-sections-alignment.patch 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. From 76946dd67bc856eaf4fe69d0826547a794176f78 Mon Sep 17 00:00:00 2001
  2. From: Sylvain Gault <sylvain.gault@gmail.com>
  3. Date: Tue, 29 Sep 2015 04:45:09 +0200
  4. Subject: [PATCH] bios: Don't try to guess the sections alignment
  5. For the compression / decompression to succeed, the sections layout must
  6. be the same between the virtual memory and load memory. The section
  7. alignment was kept in sync by introducing aligment that should be
  8. greater or equal to the actual section alignment.
  9. This patch compute the load memory addresses of the sections so that
  10. the layout is the same as the virtual memory addresses.
  11. Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
  12. Tested-by: poma <pomidorabelisima@gmail.com>
  13. Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
  14. Upstream: 0cc9a99e560a2f52bcf052fd85b1efae35ee812f
  15. Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
  16. ---
  17. core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
  18. core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
  19. 2 files changed, 24 insertions(+), 102 deletions(-)
  20. diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
  21. index 73904510..92b75b11 100644
  22. --- a/core/i386/syslinux.ld
  23. +++ b/core/i386/syslinux.ld
  24. @@ -255,10 +255,9 @@ SECTIONS
  25. . = 0x100000;
  26. __pm_code_start = .;
  27. + __vma_to_lma = __pm_code_lma - __pm_code_start;
  28. - __text_vma = .;
  29. - __text_lma = __pm_code_lma;
  30. - .text : AT(__text_lma) {
  31. + .text : AT(ADDR(.text) + __vma_to_lma) {
  32. FILL(0x90909090)
  33. __text_start = .;
  34. *(.text)
  35. @@ -266,106 +265,68 @@ SECTIONS
  36. __text_end = .;
  37. }
  38. - . = ALIGN(32);
  39. -
  40. - __rodata_vma = .;
  41. - __rodata_lma = __rodata_vma + __text_lma - __text_vma;
  42. - .rodata : AT(__rodata_lma) {
  43. + .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
  44. __rodata_start = .;
  45. *(.rodata)
  46. *(.rodata.*)
  47. __rodata_end = .;
  48. }
  49. - . = ALIGN(4);
  50. -
  51. - __ctors_vma = .;
  52. - __ctors_lma = __ctors_vma + __text_lma - __text_vma;
  53. - .ctors : AT(__ctors_lma) {
  54. + .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
  55. __ctors_start = .;
  56. KEEP (*(SORT(.ctors.*)))
  57. KEEP (*(.ctors))
  58. __ctors_end = .;
  59. }
  60. - __dtors_vma = .;
  61. - __dtors_lma = __dtors_vma + __text_lma - __text_vma;
  62. - .dtors : AT(__dtors_lma) {
  63. + .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
  64. __dtors_start = .;
  65. KEEP (*(SORT(.dtors.*)))
  66. KEEP (*(.dtors))
  67. __dtors_end = .;
  68. }
  69. - . = ALIGN(4);
  70. -
  71. - __dynsym_vma = .;
  72. - __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
  73. - .dynsym : AT(__dynsym_lma) {
  74. + .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
  75. __dynsym_start = .;
  76. *(.dynsym)
  77. __dynsym_end = .;
  78. }
  79. __dynsym_len = __dynsym_end - __dynsym_start;
  80. - . = ALIGN(4);
  81. -
  82. - __dynstr_vma = .;
  83. - __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
  84. - .dynstr : AT(__dynstr_lma) {
  85. + .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
  86. __dynstr_start = .;
  87. *(.dynstr)
  88. __dynstr_end = .;
  89. }
  90. __dynstr_len = __dynstr_end - __dynstr_start;
  91. - . = ALIGN(4);
  92. -
  93. - __gnu_hash_vma = .;
  94. - __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
  95. - .gnu.hash : AT(__gnu_hash_lma) {
  96. + .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
  97. __gnu_hash_start = .;
  98. *(.gnu.hash)
  99. __gnu_hash_end = .;
  100. }
  101. - . = ALIGN(4);
  102. -
  103. - __dynlink_vma = .;
  104. - __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
  105. - .dynlink : AT(__dynlink_lma) {
  106. + .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
  107. __dynlink_start = .;
  108. *(.dynlink)
  109. __dynlink_end = .;
  110. }
  111. - . = ALIGN(4);
  112. -
  113. - __got_vma = .;
  114. - __got_lma = __got_vma + __text_lma - __text_vma;
  115. - .got : AT(__got_lma) {
  116. + .got : AT(ADDR(.got) + __vma_to_lma) {
  117. __got_start = .;
  118. KEEP (*(.got.plt))
  119. KEEP (*(.got))
  120. __got_end = .;
  121. }
  122. - . = ALIGN(4);
  123. -
  124. - __dynamic_vma = .;
  125. - __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
  126. - .dynamic : AT(__dynamic_lma) {
  127. + .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
  128. __dynamic_start = .;
  129. *(.dynamic)
  130. __dynamic_end = .;
  131. }
  132. - . = ALIGN(32);
  133. -
  134. - __data_vma = .;
  135. - __data_lma = __data_vma + __text_lma - __text_vma;
  136. - .data : AT(__data_lma) {
  137. + .data : AT(ADDR(.data) + __vma_to_lma) {
  138. __data_start = .;
  139. *(.data)
  140. *(.data.*)
  141. diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
  142. index bf815c46..70c6e00a 100644
  143. --- a/core/x86_64/syslinux.ld
  144. +++ b/core/x86_64/syslinux.ld
  145. @@ -255,10 +255,9 @@ SECTIONS
  146. . = 0x100000;
  147. __pm_code_start = .;
  148. + __vma_to_lma = __pm_code_lma - __pm_code_start;
  149. - __text_vma = .;
  150. - __text_lma = __pm_code_lma;
  151. - .text : AT(__text_lma) {
  152. + .text : AT(ADDR(.text) + __vma_to_lma) {
  153. FILL(0x90909090)
  154. __text_start = .;
  155. *(.text)
  156. @@ -266,106 +265,68 @@ SECTIONS
  157. __text_end = .;
  158. }
  159. - . = ALIGN(32);
  160. -
  161. - __rodata_vma = .;
  162. - __rodata_lma = __rodata_vma + __text_lma - __text_vma;
  163. - .rodata : AT(__rodata_lma) {
  164. + .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
  165. __rodata_start = .;
  166. *(.rodata)
  167. *(.rodata.*)
  168. __rodata_end = .;
  169. }
  170. - . = ALIGN(4);
  171. -
  172. - __ctors_vma = .;
  173. - __ctors_lma = __ctors_vma + __text_lma - __text_vma;
  174. - .ctors : AT(__ctors_lma) {
  175. + .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
  176. __ctors_start = .;
  177. KEEP (*(SORT(.ctors.*)))
  178. KEEP (*(.ctors))
  179. __ctors_end = .;
  180. }
  181. - __dtors_vma = .;
  182. - __dtors_lma = __dtors_vma + __text_lma - __text_vma;
  183. - .dtors : AT(__dtors_lma) {
  184. + .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
  185. __dtors_start = .;
  186. KEEP (*(SORT(.dtors.*)))
  187. KEEP (*(.dtors))
  188. __dtors_end = .;
  189. }
  190. - . = ALIGN(4);
  191. -
  192. - __dynsym_vma = .;
  193. - __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
  194. - .dynsym : AT(__dynsym_lma) {
  195. + .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
  196. __dynsym_start = .;
  197. *(.dynsym)
  198. __dynsym_end = .;
  199. }
  200. __dynsym_len = __dynsym_end - __dynsym_start;
  201. - . = ALIGN(4);
  202. -
  203. - __dynstr_vma = .;
  204. - __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
  205. - .dynstr : AT(__dynstr_lma) {
  206. + .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
  207. __dynstr_start = .;
  208. *(.dynstr)
  209. __dynstr_end = .;
  210. }
  211. __dynstr_len = __dynstr_end - __dynstr_start;
  212. - . = ALIGN(4);
  213. -
  214. - __gnu_hash_vma = .;
  215. - __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
  216. - .gnu.hash : AT(__gnu_hash_lma) {
  217. + .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
  218. __gnu_hash_start = .;
  219. *(.gnu.hash)
  220. __gnu_hash_end = .;
  221. }
  222. - . = ALIGN(4);
  223. -
  224. - __dynlink_vma = .;
  225. - __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
  226. - .dynlink : AT(__dynlink_lma) {
  227. + .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
  228. __dynlink_start = .;
  229. *(.dynlink)
  230. __dynlink_end = .;
  231. }
  232. - . = ALIGN(4);
  233. -
  234. - __got_vma = .;
  235. - __got_lma = __got_vma + __text_lma - __text_vma;
  236. - .got : AT(__got_lma) {
  237. + .got : AT(ADDR(.got) + __vma_to_lma) {
  238. __got_start = .;
  239. KEEP (*(.got.plt))
  240. KEEP (*(.got))
  241. __got_end = .;
  242. }
  243. - . = ALIGN(4);
  244. -
  245. - __dynamic_vma = .;
  246. - __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
  247. - .dynamic : AT(__dynamic_lma) {
  248. + .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
  249. __dynamic_start = .;
  250. *(.dynamic)
  251. __dynamic_end = .;
  252. }
  253. - . = ALIGN(32);
  254. -
  255. - __data_vma = .;
  256. - __data_lma = __data_vma + __text_lma - __text_vma;
  257. - .data : AT(__data_lma) {
  258. + .data : AT(ADDR(.data) + __vma_to_lma) {
  259. __data_start = .;
  260. *(.data)
  261. *(.data.*)
  262. --
  263. 2.13.3