0010-core-Clean-up-the-i386-bios-build.patch 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. From a14b1b3d3e375d2e8af8804171ef5e52574dbb2a Mon Sep 17 00:00:00 2001
  2. From: "H. Peter Anvin" <hpa@zytor.com>
  3. Date: Tue, 9 Feb 2016 18:15:50 -0800
  4. Subject: [PATCH] core: Clean up the i386-bios build
  5. Remove symbols and data structures not used in the i386-bios build,
  6. and clean up the linker script so that most internal symbols are
  7. HIDDEN.
  8. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
  9. Upstream: ff859050fa4e6535cae098dc35d88a265466448d
  10. This patch fixes the following build failure with i386 binutils 2.28.1:
  11. /builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld -Bsymbolic -pie -E --hash-style=gnu -T
  12. /builds/arnout/buildroot/output/build/syslinux-6.03/core/i386/syslinux.ld -M -o ldlinux.elf ldlinux.o \
  13. --start-group libcom32.a --whole-archive /builds/arnout/buildroot/output/build/syslinux-6.03/bios/com32/lib/libcom32core.a libldlinux.a --end-group -N
  14. --no-omagic \
  15. > ldlinux.map
  16. /builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld: ldlinux.elf: Not enough room for program headers, try linking with -N
  17. /builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld: final link failed: Bad value
  18. /builds/arnout/buildroot/output/build/syslinux-6.03/core/Makefile:167: recipe for target 'ldlinux.elf' failed
  19. Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
  20. ---
  21. core/extern.inc | 17 +--
  22. core/i386/syslinux.ld | 287 +++++++++++++++++++++++++-------------------------
  23. core/layout.inc | 11 --
  24. 3 files changed, 143 insertions(+), 172 deletions(-)
  25. diff --git a/core/extern.inc b/core/extern.inc
  26. index af8eb04c..ce4abfab 100644
  27. --- a/core/extern.inc
  28. +++ b/core/extern.inc
  29. @@ -12,27 +12,17 @@
  30. ; hello.c
  31. extern hello
  32. - ;abort.c
  33. - extern abort_load_new
  34. -
  35. ; elflink/load_env32.c
  36. extern load_env32, pm_env32_run
  37. - ; memscan.c
  38. - extern highmem_init
  39. -
  40. - extern linux_kernel
  41. -
  42. extern mp1, mp2, mp3, mp4, mp5
  43. - extern hexdump, mydump
  44. + extern hexdump
  45. extern mem_init
  46. ; fs.c
  47. - extern pm_fs_init, pm_searchdir, getfssec, getfsbytes
  48. - extern pm_mangle_name, pm_load_config
  49. - extern pm_open_file, pm_close_file
  50. + extern pm_fs_init
  51. extern SectorSize, SectorShift
  52. ; chdir.c
  53. @@ -41,9 +31,6 @@
  54. ; readdir.c
  55. extern opendir, readdir, closedir
  56. - ; newconfig.c
  57. - extern pm_is_config_file
  58. -
  59. ; idle.c
  60. extern __idle
  61. diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
  62. index 92b75b11..39198d75 100644
  63. --- a/core/i386/syslinux.ld
  64. +++ b/core/i386/syslinux.ld
  65. @@ -1,7 +1,7 @@
  66. /* -----------------------------------------------------------------------
  67. *
  68. * Copyright 2008-2009 H. Peter Anvin - All Rights Reserved
  69. - * Copyright 2009 Intel Corporation; author: H. Peter Anvin
  70. + * Copyright 2009-2016 Intel Corporation; author: H. Peter Anvin
  71. *
  72. * This program is free software; you can redistribute it and/or modify
  73. * it under the terms of the GNU General Public License as published by
  74. @@ -12,7 +12,7 @@
  75. * ----------------------------------------------------------------------- */
  76. /*
  77. - * Linker script for the SYSLINUX core
  78. + * Linker script for the SYSLINUX core when built for i386-bios
  79. */
  80. OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
  81. @@ -26,7 +26,7 @@ SECTIONS
  82. {
  83. /* Prefix structure for the compression program */
  84. . = 0;
  85. - __module_start = .;
  86. + HIDDEN(__module_start = ABSOLUTE(.));
  87. .prefix : {
  88. *(.prefix)
  89. }
  90. @@ -35,81 +35,82 @@ SECTIONS
  91. . = 0x1000;
  92. .earlybss (NOLOAD) : {
  93. - __earlybss_start = .;
  94. + HIDDEN(__earlybss_start = .);
  95. *(.earlybss)
  96. - __earlybss_end = .;
  97. + HIDDEN(__earlybss_end = .);
  98. }
  99. - __earlybss_len = ABSOLUTE(__earlybss_end) - ABSOLUTE(__earlybss_start);
  100. - __earlybss_dwords = (__earlybss_len + 3) >> 2;
  101. + HIDDEN(__earlybss_len = ABSOLUTE(__earlybss_end) - ABSOLUTE(__earlybss_start));
  102. + HIDDEN(__earlybss_dwords = (__earlybss_len + 3) >> 2);
  103. . = ALIGN(4);
  104. .bss16 (NOLOAD) : {
  105. - __bss16_start = .;
  106. + HIDDEN(__bss16_start = .);
  107. *(.bss16)
  108. - __bss16_end = .;
  109. + HIDDEN(__bss16_end = .);
  110. }
  111. - __bss16_len = ABSOLUTE(__bss16_end) - ABSOLUTE(__bss16_start);
  112. - __bss16_dwords = (__bss16_len + 3) >> 2;
  113. + HIDDEN(__bss16_len = ABSOLUTE(__bss16_end) - ABSOLUTE(__bss16_start));
  114. + HIDDEN(__bss16_dwords = (__bss16_len + 3) >> 2);
  115. . = ALIGN(4);
  116. .config : AT (__config_lma) {
  117. - __config_start = .;
  118. + HIDDEN(__config_start = .);
  119. *(.config)
  120. - __config_end = .;
  121. + HIDDEN(__config_end = .);
  122. }
  123. - __config_len = ABSOLUTE(__config_end) - ABSOLUTE(__config_start);
  124. - __config_dwords = (__config_len + 3) >> 2;
  125. + HIDDEN(__config_len = ABSOLUTE(__config_end) - ABSOLUTE(__config_start));
  126. + HIDDEN(__config_dwords = (__config_len + 3) >> 2);
  127. /* Generated and/or copied code */
  128. . = ALIGN(128); /* Minimum separation from mutable data */
  129. .replacestub : AT (__replacestub_lma) {
  130. - __replacestub_start = .;
  131. + HIDDEN(__replacestub_start = .);
  132. *(.replacestub)
  133. - __replacestub_end = .;
  134. + HIDDEN(__replacestub_end = .);
  135. }
  136. - __replacestub_len = ABSOLUTE(__replacestub_end) - ABSOLUTE(__replacestub_start);
  137. - __replacestub_dwords = (__replacestub_len + 3) >> 2;
  138. + HIDDEN(__replacestub_len = ABSOLUTE(__replacestub_end) - ABSOLUTE(__replacestub_start));
  139. + HIDDEN(__replacestub_dwords = (__replacestub_len + 3) >> 2);
  140. . = ALIGN(16);
  141. - __gentextnr_lma = .;
  142. + HIDDEN(__gentextnr_lma = .);
  143. .gentextnr : AT(__gentextnr_lma) {
  144. - __gentextnr_start = .;
  145. + HIDDEN(__gentextnr_start = .);
  146. *(.gentextnr)
  147. - __gentextnr_end = .;
  148. + HIDDEN(__gentextnr_end = .);
  149. }
  150. - __gentextnr_len = ABSOLUTE(__gentextnr_end) - ABSOLUTE(__gentextnr_start);
  151. - __gentextnr_dwords = (__gentextnr_len + 3) >> 2;
  152. + HIDDEN(__gentextnr_len = ABSOLUTE(__gentextnr_end) - ABSOLUTE(__gentextnr_start));
  153. + HIDDEN(__gentextnr_dwords = (__gentextnr_len + 3) >> 2);
  154. . = STACK_BASE;
  155. .stack16 : AT(STACK_BASE) {
  156. - __stack16_start = .;
  157. + HIDDEN(__stack16_start = .);
  158. . += STACK_LEN;
  159. - __stack16_end = .;
  160. + HIDDEN(__stack16_end = .);
  161. }
  162. - __stack16_len = ABSOLUTE(__stack16_end) - ABSOLUTE(__stack16_start);
  163. - __stack16_dwords = (__stack16_len + 3) >> 2;
  164. + HIDDEN(__stack16_len = ABSOLUTE(__stack16_end) - ABSOLUTE(__stack16_start));
  165. + HIDDEN(__stack16_dwords = (__stack16_len + 3) >> 2);
  166. /* Initialized sections */
  167. . = 0x7c00;
  168. .init : {
  169. FILL(0x90909090)
  170. - __init_start = .;
  171. + HIDDEN(__init_start = .);
  172. *(.init)
  173. - __init_end = .;
  174. + HIDDEN(__init_end = .);
  175. }
  176. - __init_len = ABSOLUTE(__init_end) - ABSOLUTE(__init_start);
  177. - __init_dwords = (__init_len + 3) >> 2;
  178. + HIDDEN(__init_len = ABSOLUTE(__init_end) - ABSOLUTE(__init_start));
  179. + HIDDEN(__init_dwords = (__init_len + 3) >> 2);
  180. + . = ALIGN(4);
  181. .text16 : {
  182. FILL(0x90909090)
  183. - __text16_start = .;
  184. + HIDDEN(__text16_start = .);
  185. *(.text16)
  186. - __text16_end = .;
  187. + HIDDEN(__text16_end = .);
  188. }
  189. - __text16_len = ABSOLUTE(__text16_end) - ABSOLUTE(__text16_start);
  190. - __text16_dwords = (__text16_len + 3) >> 2;
  191. + HIDDEN(__text16_len = ABSOLUTE(__text16_end) - ABSOLUTE(__text16_start));
  192. + HIDDEN(__text16_dwords = (__text16_len + 3) >> 2);
  193. /*
  194. * .textnr is used for 32-bit code that is used on the code
  195. @@ -118,99 +119,92 @@ SECTIONS
  196. . = ALIGN(16);
  197. .textnr : {
  198. FILL(0x90909090)
  199. - __textnr_start = .;
  200. + HIDDEN(__textnr_start = .);
  201. *(.textnr)
  202. - __textnr_end = .;
  203. + HIDDEN(__textnr_end = .);
  204. }
  205. - __textnr_len = ABSOLUTE(__textnr_end) - ABSOLUTE(__textnr_start);
  206. - __textnr_dwords = (__textnr_len + 3) >> 2;
  207. + HIDDEN(__textnr_len = ABSOLUTE(__textnr_end) - ABSOLUTE(__textnr_start));
  208. + HIDDEN(__textnr_dwords = (__textnr_len + 3) >> 2);
  209. . = ALIGN(16);
  210. - __bcopyxx_start = .;
  211. + HIDDEN(__bcopyxx_start = .);
  212. .bcopyxx.text : {
  213. FILL(0x90909090)
  214. - __bcopyxx_text_start = .;
  215. + HIDDEN(__bcopyxx_text_start = .);
  216. *(.bcopyxx.text)
  217. - __bcopyxx_text_end = .;
  218. + HIDDEN(__bcopyxx_text_end = .);
  219. }
  220. - __bcopyxx_text_len = ABSOLUTE(__bcopyxx_text_end) - ABSOLUTE(__bcopyxx_text_start);
  221. - __bcopyxx_text_dwords = (__bcopyxx_text_len + 3) >> 2;
  222. + HIDDEN(__bcopyxx_text_len = ABSOLUTE(__bcopyxx_text_end) - ABSOLUTE(__bcopyxx_text_start));
  223. + HIDDEN(__bcopyxx_text_dwords = (__bcopyxx_text_len + 3) >> 2);
  224. .bcopyxx.data : {
  225. - __bcopyxx_data_start = .;
  226. + HIDDEN(__bcopyxx_data_start = .);
  227. *(.bcopyxx.text)
  228. - __bcopyxx_data_end = .;
  229. + HIDDEN(__bcopyxx_data_end = .);
  230. }
  231. - __bcopyxx_data_len = ABSOLUTE(__bcopyxx_data_end) - ABSOLUTE(__bcopyxx_data_start);
  232. - __bcopyxx_data_dwords = (__bcopyxx_data_len + 3) >> 2;
  233. + HIDDEN(__bcopyxx_data_len = ABSOLUTE(__bcopyxx_data_end) - ABSOLUTE(__bcopyxx_data_start));
  234. + HIDDEN(__bcopyxx_data_dwords = (__bcopyxx_data_len + 3) >> 2);
  235. - __bcopyxx_end = .;
  236. - __bcopyxx_len = ABSOLUTE(__bcopyxx_end) - ABSOLUTE(__bcopyxx_start);
  237. - __bcopyxx_dwords = (__bcopyxx_len + 3) >> 2;
  238. + HIDDEN(__bcopyxx_end = .);
  239. + HIDDEN(__bcopyxx_len = ABSOLUTE(__bcopyxx_end) - ABSOLUTE(__bcopyxx_start));
  240. + HIDDEN(__bcopyxx_dwords = (__bcopyxx_len + 3) >> 2);
  241. . = ALIGN(4);
  242. .data16 : {
  243. - __data16_start = .;
  244. + HIDDEN(__data16_start = .);
  245. *(.data16)
  246. - __data16_end = .;
  247. + HIDDEN(__data16_end = .);
  248. }
  249. - __data16_len = ABSOLUTE(__data16_end) - ABSOLUTE(__data16_start);
  250. - __data16_dwords = (__data16_len + 3) >> 2;
  251. + HIDDEN(__data16_len = ABSOLUTE(__data16_end) - ABSOLUTE(__data16_start));
  252. + HIDDEN(__data16_dwords = (__data16_len + 3) >> 2);
  253. . = ALIGN(4);
  254. - __config_lma = .;
  255. + HIDDEN(__config_lma = ABSOLUTE(.));
  256. . += SIZEOF(.config);
  257. . = ALIGN(4);
  258. - __replacestub_lma = .;
  259. + HIDDEN(__replacestub_lma = ABSOLUTE(.));
  260. . += SIZEOF(.replacestub);
  261. /* The 32-bit code loads above the non-progbits sections */
  262. . = ALIGN(16);
  263. - __pm_code_lma = .;
  264. + HIDDEN(__pm_code_lma = ABSOLUTE(.));
  265. - __high_clear_start = .;
  266. + HIDDEN(__high_clear_start = .);
  267. . = ALIGN(512);
  268. .adv (NOLOAD) : {
  269. - __adv_start = .;
  270. + HIDDEN(__adv_start = .);
  271. *(.adv)
  272. - __adv_end = .;
  273. + HIDDEN(__adv_end = .);
  274. }
  275. - __adv_len = ABSOLUTE(__adv_end) - ABSOLUTE(__adv_start);
  276. - __adv_dwords = (__adv_len + 3) >> 2;
  277. + HIDDEN(__adv_len = ABSOLUTE(__adv_end) - ABSOLUTE(__adv_start));
  278. + HIDDEN(__adv_dwords = (__adv_len + 3) >> 2);
  279. /* Late uninitialized sections */
  280. . = ALIGN(4);
  281. .uibss (NOLOAD) : {
  282. - __uibss_start = .;
  283. + HIDDEN(__uibss_start = .);
  284. *(.uibss)
  285. - __uibss_end = .;
  286. + HIDDEN(__uibss_end = .);
  287. }
  288. - __uibss_len = ABSOLUTE(__uibss_end) - ABSOLUTE(__uibss_start);
  289. - __uibss_dwords = (__uibss_len + 3) >> 2;
  290. + HIDDEN(__uibss_len = ABSOLUTE(__uibss_end) - ABSOLUTE(__uibss_start));
  291. + HIDDEN(__uibss_dwords = (__uibss_len + 3) >> 2);
  292. - _end16 = .;
  293. - __assert_end16 = ASSERT(_end16 <= 0x10000, "64K overflow");
  294. + HIDDEN(_end16 = .);
  295. + HIDDEN(__assert_end16 = ASSERT(_end16 <= 0x10000, "64K overflow"));
  296. /*
  297. * Special 16-bit segments
  298. */
  299. -
  300. - . = ALIGN(65536);
  301. - .real_mode (NOLOAD) : {
  302. - *(.real_mode)
  303. - }
  304. - real_mode_seg = core_real_mode >> 4;
  305. -
  306. . = ALIGN(65536);
  307. .xfer_buf (NOLOAD) : {
  308. *(.xfer_buf)
  309. }
  310. - xfer_buf_seg = core_xfer_buf >> 4;
  311. + HIDDEN(xfer_buf_seg = core_xfer_buf >> 4);
  312. /*
  313. * The auxilliary data segment is used by the 16-bit code
  314. @@ -219,33 +213,33 @@ SECTIONS
  315. . = ALIGN(16);
  316. .auxseg (NOLOAD) : {
  317. - __auxseg_start = .;
  318. + HIDDEN(__auxseg_start = .);
  319. *(.auxseg)
  320. - __auxseg_end = .;
  321. + HIDDEN(__auxseg_end = .);
  322. }
  323. - __auxseg_len = ABSOLUTE(__auxseg_end) - ABSOLUTE(__auxseg_start);
  324. - __auxseg_dwords = (__auxseg_len + 3) >> 2;
  325. - aux_seg = __auxseg_start >> 4;
  326. + HIDDEN(__auxseg_len = ABSOLUTE(__auxseg_end) - ABSOLUTE(__auxseg_start));
  327. + HIDDEN(__auxseg_dwords = (__auxseg_len + 3) >> 2);
  328. + HIDDEN(aux_seg = __auxseg_start >> 4);
  329. /*
  330. * Used to allocate lowmem buffers from 32-bit code
  331. */
  332. .lowmem (NOLOAD) : {
  333. - __lowmem_start = .;
  334. + HIDDEN(__lowmem_start = .);
  335. *(.lowmem)
  336. - __lowmem_end = .;
  337. + HIDDEN(__lowmem_end = .);
  338. }
  339. - __lowmem_len = ABSOLUTE(__lowmem_end) - ABSOLUTE(__lowmem_start);
  340. - __lowmem_dwords = (__lowmem_len + 3) >> 2;
  341. + HIDDEN(__lowmem_len = ABSOLUTE(__lowmem_end) - ABSOLUTE(__lowmem_start));
  342. + HIDDEN(__lowmem_dwords = (__lowmem_len + 3) >> 2);
  343. - __high_clear_end = .;
  344. + HIDDEN(__high_clear_end = .);
  345. - __high_clear_len = ABSOLUTE(__high_clear_end) - ABSOLUTE(__high_clear_start);
  346. - __high_clear_dwords = (__high_clear_len + 3) >> 2;
  347. + HIDDEN(__high_clear_len = ABSOLUTE(__high_clear_end) - ABSOLUTE(__high_clear_start));
  348. + HIDDEN(__high_clear_dwords = (__high_clear_len + 3) >> 2);
  349. /* Start of the lowmem heap */
  350. . = ALIGN(16);
  351. - __lowmem_heap = .;
  352. + HIDDEN(__lowmem_heap = .);
  353. /*
  354. * 32-bit code. This is a hack for the moment due to the
  355. @@ -254,136 +248,137 @@ SECTIONS
  356. . = 0x100000;
  357. - __pm_code_start = .;
  358. - __vma_to_lma = __pm_code_lma - __pm_code_start;
  359. + HIDDEN(__pm_code_start = .);
  360. + HIDDEN(__vma_to_lma = ABSOLUTE(__pm_code_lma - __pm_code_start));
  361. .text : AT(ADDR(.text) + __vma_to_lma) {
  362. FILL(0x90909090)
  363. - __text_start = .;
  364. + HIDDEN(__text_start = .);
  365. *(.text)
  366. *(.text.*)
  367. - __text_end = .;
  368. + HIDDEN(__text_end = .);
  369. }
  370. .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
  371. - __rodata_start = .;
  372. + HIDDEN(__rodata_start = .);
  373. *(.rodata)
  374. *(.rodata.*)
  375. - __rodata_end = .;
  376. + HIDDEN(__rodata_end = .);
  377. }
  378. .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
  379. - __ctors_start = .;
  380. + HIDDEN(__ctors_start = .);
  381. KEEP (*(SORT(.ctors.*)))
  382. KEEP (*(.ctors))
  383. - __ctors_end = .;
  384. + HIDDEN(__ctors_end = .);
  385. }
  386. .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
  387. - __dtors_start = .;
  388. + HIDDEN(__dtors_start = .);
  389. KEEP (*(SORT(.dtors.*)))
  390. KEEP (*(.dtors))
  391. - __dtors_end = .;
  392. + HIDDEN(__dtors_end = .);
  393. }
  394. .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
  395. - __dynsym_start = .;
  396. - *(.dynsym)
  397. - __dynsym_end = .;
  398. + HIDDEN(__dynsym_start = .);
  399. + KEEP (*(.dynsym))
  400. + HIDDEN(__dynsym_end = .);
  401. }
  402. - __dynsym_len = __dynsym_end - __dynsym_start;
  403. + HIDDEN(__dynsym_len = __dynsym_end - __dynsym_start);
  404. .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
  405. - __dynstr_start = .;
  406. - *(.dynstr)
  407. - __dynstr_end = .;
  408. + HIDDEN(__dynstr_start = .);
  409. + KEEP (*(.dynstr))
  410. + HIDDEN(__dynstr_end = .);
  411. }
  412. - __dynstr_len = __dynstr_end - __dynstr_start;
  413. + HIDDEN(__dynstr_len = __dynstr_end - __dynstr_start);
  414. .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
  415. - __gnu_hash_start = .;
  416. - *(.gnu.hash)
  417. - __gnu_hash_end = .;
  418. + HIDDEN(__gnu_hash_start = .);
  419. + KEEP (*(.gnu.hash))
  420. + HIDDEN(__gnu_hash_end = .);
  421. }
  422. .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
  423. - __dynlink_start = .;
  424. - *(.dynlink)
  425. - __dynlink_end = .;
  426. + HIDDEN(__dynlink_start = .);
  427. + KEEP (*(.dynlink))
  428. + HIDDEN(__dynlink_end = .);
  429. }
  430. .got : AT(ADDR(.got) + __vma_to_lma) {
  431. - __got_start = .;
  432. - KEEP (*(.got.plt))
  433. + HIDDEN(__got_start = .);
  434. KEEP (*(.got))
  435. - __got_end = .;
  436. + KEEP (*(.got.plt))
  437. + HIDDEN(__got_end = .);
  438. }
  439. .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
  440. - __dynamic_start = .;
  441. - *(.dynamic)
  442. - __dynamic_end = .;
  443. + HIDDEN(__dynamic_start = .);
  444. + KEEP (*(.dynamic))
  445. + HIDDEN(__dynamic_end = .);
  446. }
  447. .data : AT(ADDR(.data) + __vma_to_lma) {
  448. - __data_start = .;
  449. + HIDDEN(__data_start = .);
  450. *(.data)
  451. *(.data.*)
  452. - __data_end = .;
  453. + HIDDEN(__data_end = .);
  454. }
  455. - __pm_code_end = .;
  456. - __pm_code_len = ABSOLUTE(__pm_code_end) - ABSOLUTE(__pm_code_start);
  457. - __pm_code_dwords = (__pm_code_len + 3) >> 2;
  458. + HIDDEN(__pm_code_end = .);
  459. + HIDDEN(__pm_code_len = ABSOLUTE(__pm_code_end) - ABSOLUTE(__pm_code_start));
  460. + HIDDEN(__pm_code_dwords = (__pm_code_len + 3) >> 2);
  461. . = ALIGN(128);
  462. - __bss_vma = .;
  463. - __bss_lma = .; /* Dummy */
  464. + HIDDEN(__bss_vma = .);
  465. + HIDDEN(__bss_lma = ABSOLUTE(.)); /* Dummy */
  466. .bss (NOLOAD) : AT (__bss_lma) {
  467. - __bss_start = .;
  468. + HIDDEN(__bss_start = .);
  469. *(.bss)
  470. *(.bss.*)
  471. *(COMMON)
  472. - __bss_end = .;
  473. + HIDDEN(__bss_end = .);
  474. }
  475. - __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
  476. - __bss_dwords = (__bss_len + 3) >> 2;
  477. + HIDDEN(__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start));
  478. + HIDDEN(__bss_dwords = (__bss_len + 3) >> 2);
  479. /* Very large objects which don't need to be zeroed */
  480. - __hugebss_vma = .;
  481. - __hugebss_lma = .; /* Dummy */
  482. + HIDDEN(__hugebss_vma = .);
  483. + HIDDEN(__hugebss_lma = ABSOLUTE(.)); /* Dummy */
  484. .hugebss (NOLOAD) : AT (__hugebss_lma) {
  485. - __hugebss_start = .;
  486. + HIDDEN(__hugebss_start = .);
  487. *(.hugebss)
  488. *(.hugebss.*)
  489. - __hugebss_end = .;
  490. + HIDDEN(__hugebss_end = .);
  491. }
  492. - __hugebss_len = ABSOLUTE(__hugebss_end) - ABSOLUTE(__hugebss_start);
  493. - __hugebss_dwords = (__hugebss_len + 3) >> 2;
  494. + HIDDEN(__hugebss_len = ABSOLUTE(__hugebss_end) - ABSOLUTE(__hugebss_start));
  495. + HIDDEN(__hugebss_dwords = (__hugebss_len + 3) >> 2);
  496. /* XXX: This stack should be unified with the COM32 stack */
  497. - __stack_vma = .;
  498. - __stack_lma = .; /* Dummy */
  499. + HIDDEN(__stack_vma = .);
  500. + HIDDEN(__stack_lma = ABSOLUTE(.)); /* Dummy */
  501. .stack (NOLOAD) : AT(__stack_lma) {
  502. - __stack_start = .;
  503. + HIDDEN(__stack_start = .);
  504. *(.stack)
  505. - __stack_end = .;
  506. + HIDDEN(__stack_end = .);
  507. }
  508. - __stack_len = ABSOLUTE(__stack_end) - ABSOLUTE(__stack_start);
  509. - __stack_dwords = (__stack_len + 3) >> 2;
  510. + HIDDEN(__stack_len = ABSOLUTE(__stack_end) - ABSOLUTE(__stack_start));
  511. + HIDDEN(__stack_dwords = (__stack_len + 3) >> 2);
  512. - _end = .;
  513. + HIDDEN(_end = .);
  514. /* COM32R and kernels are loaded after our own PM code */
  515. . = ALIGN(65536);
  516. - free_high_memory = .;
  517. + HIDDEN(free_high_memory = .);
  518. /* Stuff we don't need... */
  519. /DISCARD/ : {
  520. *(.eh_frame)
  521. + *(.interp)
  522. }
  523. }
  524. diff --git a/core/layout.inc b/core/layout.inc
  525. index 53ca783d..635df537 100644
  526. --- a/core/layout.inc
  527. +++ b/core/layout.inc
  528. @@ -139,17 +139,6 @@ serial_buf_size equ 4096 ; Should be a power of 2
  529. core_xfer_buf resb 65536
  530. ;
  531. -; Segment for the real mode code (needed as long as we have a in-kernel
  532. -; loader and/or COM16 support.
  533. -; One symbol for the segment number, one for the absolute address
  534. -;
  535. - extern real_mode_seg
  536. - section .real_mode write nobits align=65536
  537. - global core_real_mode:data hidden
  538. -core_real_mode resb 65536
  539. -comboot_seg equ real_mode_seg ; COMBOOT image loading zone
  540. -
  541. -;
  542. ; At the very end, the lowmem heap
  543. ;
  544. extern __lowmem_heap
  545. --
  546. 2.13.3