This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
RE: VMA section overlap warnings for overlays
- From: "David Stubbs" <stubbs at IceraSemi dot com>
- To: "Alan Modra" <amodra at gmail dot com>
- Cc: <binutils at sourceware dot org>, "sdkteam-gnu" <sdkteam-gnu at IceraSemi dot com>
- Date: Wed, 12 May 2010 14:19:24 +0100
- Subject: RE: VMA section overlap warnings for overlays
- References: <4D60B0700D1DB54A8C0C6E9BE69163700E67DFD1@EXCHANGEVS.IceraSemi.local> <20100421082441.GG3510@bubble.grove.modra.org> <4D60B0700D1DB54A8C0C6E9BE69163700E7815C7@EXCHANGEVS.IceraSemi.local> <20100422011106.GI3510@bubble.grove.modra.org> <20100422015303.GK3510@bubble.grove.modra.org> <4D60B0700D1DB54A8C0C6E9BE69163700E7F2F15@EXCHANGEVS.IceraSemi.local> <20100424021750.GQ3510@bubble.grove.modra.org> <4D60B0700D1DB54A8C0C6E9BE69163700EC60376@EXCHANGEVS.IceraSemi.local> <20100508114913.GA31122@bubble.grove.modra.org>
> On Fri, May 07, 2010 at 05:14:06PM +0100, David Stubbs wrote:
> > Does the following patch look like the correct fix?
>
> No, it doesn't look correct. I think your problem is more likely
> due
> to a ldlang.c bug in setting lma. Do you have a testcase handy?
Thanks for the response. I didn't realize / think that you needed to
allocate filespace for bss sections when they're followed by non BSS
sections in the same segment.
I wasn't able to reproduce the problem, but that turned out to be
because I'd somehow lost the bit of code that calls write_zeros in our
copy of the source.
I have however found another potential problem with strip. Here's the
test:
---
brsbs01 0>cat start.s
.section .text,"ax",@progbits
.globl _start
.type _start, @function
_start:
nop
.section .dmem.bss,"aw",@nobits
.zero 0x10
brsbs01 0>cat over.S
.section SEC_NAME,"ax",@progbits
.zero 0x10
.section SEC_NAME.bss,"aw",@nobits
.zero 0x10
brsbs01 0>cat ldscript.x
OUTPUT_FORMAT("elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
PHDRS
{
mem PT_LOAD;
imem PT_LOAD;
}
SECTIONS
{
.text 0x1000:
{
*(.text)
} :mem
.dmem.bss 0x2000
: AT (LOADADDR (.text) + SIZEOF (.text))
{
*(.dmem.bss)
} :imem
.overlay1 ADDR (.dmem.bss) + SIZEOF (.dmem.bss)
: AT (LOADADDR (.dmem.bss) + SIZEOF (.dmem.bss))
{
*(.overlay1)
} :imem
.overlay2 ADDR (.dmem.bss) + SIZEOF (.dmem.bss)
: AT (LOADADDR (.overlay1) + SIZEOF (.overlay1))
{
*(.overlay2)
} :imem
.overlay1.bss ADDR (.overlay1) + SIZEOF (.overlay1)
: AT (LOADADDR (.overlay2) + SIZEOF (.overlay2))
{
*(.overlay1.bss)
} :imem
.overlay2.bss ADDR (.overlay2) + SIZEOF (.overlay2)
: AT (LOADADDR (.overlay1.bss) + SIZEOF (.overlay1.bss))
{
*(.overlay1.bss)
} :imem
}
brsbs01 0>gcc over.S -DSEC_NAME=.overlay1 -c -o over1.o
brsbs01 0>gcc over.S -DSEC_NAME=.overlay2 -c -o over2.o
brsbs01 0>gcc start.s -c -o start.o
brsbs01 0>ld over1.o over2.o start.o -T ldscript.x -o test.exe
brsbs01 1>strip test.exe
BFD: stHVOxcK: section .overlay1.bss lma 0x1021 overlaps previous
sections
BFD: stHVOxcK: section .overlay2.bss lma 0x1021 overlaps previous
sections
---
The overlap warning is being emitted because 'adjust' is being
calculated as a negative number. I don't yet know why.
Thanks again,
Dave.