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