[build] Avoid modifying load addresses when stripping .zinfo section

Some versions of objcopy will spuriously complain when asked to
extract the .zinfo section since doing so will nominally alter the
load addresses of the (non-loadable) .bss.* sections.

Avoid these warnings by placing the .zinfo section at the very end of
the load memory address space.

Allocate non-overlapping load memory addresses for the (non-loadable)
.bss.* sections, in the hope of avoiding spurious warnings about
overlapping load addresses.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/242/head
Michael Brown 2021-01-30 01:35:27 +00:00
parent d8dc06fbf9
commit fe52f8e8be
1 changed files with 42 additions and 7 deletions

View File

@ -58,11 +58,12 @@ SECTIONS {
*(SORT(.pci_devlist.*)) *(SORT(.pci_devlist.*))
*(.prefix.*) *(.prefix.*)
_mprefix = .; _mprefix = .;
} .bss.prefix (NOLOAD) : AT ( _end_lma ) { } .bss.prefix (NOLOAD) : AT ( _bss_prefix_lma ) {
_eprefix = .; _eprefix = .;
} }
_prefix_filesz = ABSOLUTE ( _mprefix ) - ABSOLUTE ( _prefix ); _prefix_filesz = ABSOLUTE ( _mprefix ) - ABSOLUTE ( _prefix );
_prefix_memsz = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix ); _prefix_memsz = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix );
_prefix_padsz = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _mprefix );
/* /*
* The 16-bit (real-mode) code section * The 16-bit (real-mode) code section
@ -82,7 +83,7 @@ SECTIONS {
*(.text16) *(.text16)
*(.text16.*) *(.text16.*)
_mtext16 = .; _mtext16 = .;
} .bss.text16 (NOLOAD) : AT ( _end_lma ) { } .bss.text16 (NOLOAD) : AT ( _bss_text16_lma ) {
_etext16 = .; _etext16 = .;
} }
_text16_early_filesz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 ); _text16_early_filesz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
@ -90,6 +91,7 @@ SECTIONS {
_text16_late_filesz = ABSOLUTE ( _mtext16 ) - ABSOLUTE ( _text16_late ); _text16_late_filesz = ABSOLUTE ( _mtext16 ) - ABSOLUTE ( _text16_late );
_text16_late_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16_late ); _text16_late_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16_late );
_text16_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 ); _text16_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 );
_text16_padsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _mtext16 );
/* /*
* The 16-bit (real-mode) data section * The 16-bit (real-mode) data section
@ -104,7 +106,7 @@ SECTIONS {
*(.data16) *(.data16)
*(.data16.*) *(.data16.*)
_mdata16 = .; _mdata16 = .;
} .bss.data16 (NOLOAD) : AT ( _end_lma ) { } .bss.data16 (NOLOAD) : AT ( _bss_data16_lma ) {
*(.bss16) *(.bss16)
*(.bss16.*) *(.bss16.*)
*(.stack16) *(.stack16)
@ -114,6 +116,7 @@ SECTIONS {
} }
_data16_filesz = ABSOLUTE ( _mdata16 ) - ABSOLUTE ( _data16 ); _data16_filesz = ABSOLUTE ( _mdata16 ) - ABSOLUTE ( _data16 );
_data16_memsz = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 ); _data16_memsz = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 );
_data16_padsz = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _mdata16 );
/* /*
* The 32-bit sections * The 32-bit sections
@ -135,7 +138,7 @@ SECTIONS {
KEEP(*(.provided)) KEEP(*(.provided))
KEEP(*(.provided.*)) KEEP(*(.provided.*))
_mtextdata = .; _mtextdata = .;
} .bss.textdata (NOLOAD) : AT ( _end_lma ) { } .bss.textdata (NOLOAD) : AT ( _bss_textdata_lma ) {
*(.bss) *(.bss)
*(.bss.*) *(.bss.*)
*(COMMON) *(COMMON)
@ -157,6 +160,7 @@ SECTIONS {
} }
_textdata_filesz = ABSOLUTE ( _mtextdata ) - ABSOLUTE ( _textdata ); _textdata_filesz = ABSOLUTE ( _mtextdata ) - ABSOLUTE ( _textdata );
_textdata_memsz = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _textdata ); _textdata_memsz = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _textdata );
_textdata_padsz = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _mtextdata );
/* /*
* Payload prefix * Payload prefix
@ -169,11 +173,12 @@ SECTIONS {
KEEP(*(.pprefix)) KEEP(*(.pprefix))
KEEP(*(.pprefix.*)) KEEP(*(.pprefix.*))
_mpprefix = .; _mpprefix = .;
} .bss.pprefix (NOLOAD) : AT ( _end_lma ) { } .bss.pprefix (NOLOAD) : AT ( _bss_pprefix_lma ) {
_epprefix = .; _epprefix = .;
} }
_pprefix_filesz = ABSOLUTE ( _mpprefix ) - ABSOLUTE ( _pprefix ); _pprefix_filesz = ABSOLUTE ( _mpprefix ) - ABSOLUTE ( _pprefix );
_pprefix_memsz = ABSOLUTE ( _epprefix ) - ABSOLUTE ( _pprefix ); _pprefix_memsz = ABSOLUTE ( _epprefix ) - ABSOLUTE ( _pprefix );
_pprefix_padsz = ABSOLUTE ( _epprefix ) - ABSOLUTE ( _mpprefix );
/* /*
* Compressor information block * Compressor information block
@ -185,11 +190,12 @@ SECTIONS {
KEEP(*(.zinfo)) KEEP(*(.zinfo))
KEEP(*(.zinfo.*)) KEEP(*(.zinfo.*))
_mzinfo = .; _mzinfo = .;
} .bss.zinfo (NOLOAD) : AT ( _end_lma ) { } .bss.zinfo (NOLOAD) : AT ( _bss_zinfo_lma ) {
_ezinfo = .; _ezinfo = .;
} }
_zinfo_filesz = ABSOLUTE ( _mzinfo ) - ABSOLUTE ( _zinfo ); _zinfo_filesz = ABSOLUTE ( _mzinfo ) - ABSOLUTE ( _zinfo );
_zinfo_memsz = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _zinfo ); _zinfo_memsz = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _zinfo );
_zinfo_padsz = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _mzinfo );
/* /*
* Weak symbols that need zero values if not otherwise defined * Weak symbols that need zero values if not otherwise defined
@ -260,7 +266,36 @@ SECTIONS {
_textdata_lma = .; _textdata_lma = .;
. += _textdata_filesz; . += _textdata_filesz;
_filesz = .; /* Do not include zinfo block in file size */ _filesz = .; /* Do not include .bss.* or .zinfo in file size */
/*
* Dummy load addresses for .bss.* and .zinfo sections
*
*/
. = ALIGN ( _max_align );
_bss_prefix_lma = .;
. += _prefix_padsz;
. = ALIGN ( _max_align );
_bss_text16_lma = .;
. += _text16_padsz;
. = ALIGN ( _max_align );
_bss_data16_lma = .;
. += _data16_padsz;
. = ALIGN ( _max_align );
_bss_textdata_lma = .;
. += _textdata_padsz;
. = ALIGN ( _max_align );
_bss_pprefix_lma = .;
. += _pprefix_padsz;
. = ALIGN ( _max_align );
_bss_zinfo_lma = .;
. += _zinfo_padsz;
. = ALIGN ( _max_align ); . = ALIGN ( _max_align );
_zinfo_lma = .; _zinfo_lma = .;