From 04f32065813b41aed2474472ad6819136c5fa142 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 16 Oct 2008 20:39:48 -0400 Subject: [PATCH] [build] Fix building on Ubuntu 8.04 Not fully understood, but it seems that the LMA of bss sections matters for some newer binutils builds. Force all bss sections to have an LMA at the end of the file, so that they don't interfere with other sections. The symptom was that objcopy -O binary -j .zinfo would extract the .zinfo section from bin/xxx.tmp as a blob of the correct length, but with zero contents. This would then cause the [ZBIN] stage of the build to fail. Also explicitly state that .zinfo(.*) sections have @progbits, in case some future assembler or linker variant decides to omit them. --- src/arch/i386/prefix/dskprefix.S | 2 +- src/arch/i386/prefix/hdprefix.S | 2 +- src/arch/i386/prefix/libprefix.S | 4 ++-- src/arch/i386/prefix/lkrnprefix.S | 2 +- src/arch/i386/prefix/nbiprefix.S | 2 +- src/arch/i386/prefix/romprefix.S | 4 ++-- src/arch/i386/scripts/i386.lds | 14 ++++++++------ 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/arch/i386/prefix/dskprefix.S b/src/arch/i386/prefix/dskprefix.S index 096222190..e3a39cce6 100644 --- a/src/arch/i386/prefix/dskprefix.S +++ b/src/arch/i386/prefix/dskprefix.S @@ -145,7 +145,7 @@ got_sectors: ljmp $SYSSEG, $start_runtime endseg: .word SYSSEG + _filesz_pgh - .section ".zinfo.fixup", "a" /* Compressor fixup information */ + .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */ .ascii "SUBW" .long endseg .long 16 diff --git a/src/arch/i386/prefix/hdprefix.S b/src/arch/i386/prefix/hdprefix.S index fd82e405b..ffe1ee573 100644 --- a/src/arch/i386/prefix/hdprefix.S +++ b/src/arch/i386/prefix/hdprefix.S @@ -65,7 +65,7 @@ max_head: load_length: .long _filesz_sect - .section ".zinfo.fixup", "a" /* Compressor fixup information */ + .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */ .ascii "SUBL" .long load_length .long 512 diff --git a/src/arch/i386/prefix/libprefix.S b/src/arch/i386/prefix/libprefix.S index 8d9ab9565..60dce8e4b 100644 --- a/src/arch/i386/prefix/libprefix.S +++ b/src/arch/i386/prefix/libprefix.S @@ -679,7 +679,7 @@ prot_call_vector: /* File split information for the compressor */ #if COMPRESS - .section ".zinfo", "a" + .section ".zinfo", "a", @progbits .ascii "COPY" .long _prefix_lma .long _prefix_filesz @@ -697,7 +697,7 @@ prot_call_vector: .long _textdata_filesz .long _max_align #else /* COMPRESS */ - .section ".zinfo", "a" + .section ".zinfo", "a", @progbits .ascii "COPY" .long _prefix_lma .long _filesz diff --git a/src/arch/i386/prefix/lkrnprefix.S b/src/arch/i386/prefix/lkrnprefix.S index f9fba7d81..f23e4076a 100644 --- a/src/arch/i386/prefix/lkrnprefix.S +++ b/src/arch/i386/prefix/lkrnprefix.S @@ -94,7 +94,7 @@ root_flags: syssize: .long _filesz_pgh - PREFIXPGH - .section ".zinfo.fixup", "a" /* Compressor fixup information */ + .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */ .ascii "SUBL" .long syssize .long 16 diff --git a/src/arch/i386/prefix/nbiprefix.S b/src/arch/i386/prefix/nbiprefix.S index 7a814b7ad..ec2100947 100644 --- a/src/arch/i386/prefix/nbiprefix.S +++ b/src/arch/i386/prefix/nbiprefix.S @@ -36,7 +36,7 @@ imglen: .long _filesz - 512 memlen: .long _filesz - 512 .size segment_header, . - segment_header - .section ".zinfo.fixup", "a" /* Compressor fixup information */ + .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */ .ascii "SUBL" .long imglen .long 1 diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index 00f7abc7b..ca32a4419 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -42,7 +42,7 @@ checksum: .word pnpheader .size romheader, . - romheader - .section ".zinfo.fixup", "a" /* Compressor fixup information */ + .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */ .ascii "SUBB" .long romheader_size .long 512 @@ -69,7 +69,7 @@ pciheader_runtime_length: .equ pciheader_len, . - pciheader .size pciheader, . - pciheader - .section ".zinfo.fixup", "a" /* Compressor fixup information */ + .section ".zinfo.fixup", "a", @progbits /* Compressor fixups */ .ascii "SUBW" .long pciheader_image_length .long 512 diff --git a/src/arch/i386/scripts/i386.lds b/src/arch/i386/scripts/i386.lds index 71bb9fdd1..575cb8816 100644 --- a/src/arch/i386/scripts/i386.lds +++ b/src/arch/i386/scripts/i386.lds @@ -34,7 +34,7 @@ SECTIONS { *(.prefix) *(.prefix.*) _mprefix = .; - } .prefix_bss (NOLOAD) : { + } .prefix_bss (NOLOAD) : AT ( _end_lma ) { _eprefix = .; } _prefix_filesz = ABSOLUTE ( _mprefix - _prefix ); @@ -52,7 +52,7 @@ SECTIONS { *(.text16) *(.text16.*) _mtext16 = .; - } .text16_bss (NOLOAD) : { + } .text16_bss (NOLOAD) : AT ( _end_lma ) { _etext16 = .; } _text16_filesz = ABSOLUTE ( _mtext16 - _text16 ); @@ -71,7 +71,7 @@ SECTIONS { *(.data16) *(.data16.*) _mdata16 = .; - } .data16_bss (NOLOAD) : { + } .data16_bss (NOLOAD) : AT ( _end_lma ) { *(.bss16) *(.bss16.*) *(.stack16) @@ -98,7 +98,7 @@ SECTIONS { *(.data.*) *(SORT(.tbl.*)) /* Various tables. See include/tables.h */ _mtextdata = .; - } .textdata_bss (NOLOAD) : { + } .textdata_bss (NOLOAD) : AT ( _end_lma ) { *(.bss) *(.bss.*) *(COMMON) @@ -119,7 +119,7 @@ SECTIONS { *(.zinfo) *(.zinfo.*) _mzinfo = .; - } .zinfo_bss (NOLOAD) : { + } .zinfo_bss (NOLOAD) : AT ( _end_lma ) { _ezinfo = .; } _zinfo_filesz = ABSOLUTE ( _mzinfo - _zinfo ); @@ -130,7 +130,7 @@ SECTIONS { * */ - .weak 0x0 : { + .weak 0x0 : AT ( _end_lma ) { _weak = .; *(.weak) _eweak = .; @@ -181,6 +181,8 @@ SECTIONS { . += _zinfo_filesz; . = ALIGN ( _max_align ); + _end_lma = .; + /* * Values calculated to save code from doing it *