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