This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: PATCH: PR ld/4701: binutils generates invalid klibc-based binary on Linux x86_64
On Fri, Jun 29, 2007 at 09:45:59AM +0930, Alan Modra wrote:
> On Thu, Jun 28, 2007 at 07:44:06AM -0700, H. J. Lu wrote:
> > On Fri, Jun 29, 2007 at 12:07:17AM +0930, Alan Modra wrote:
> > > On Thu, Jun 28, 2007 at 06:39:51AM -0700, H. J. Lu wrote:
> > > > > FAIL: overlay size
> > > > >
> > > > > on Linux/x86-64. You should be able to see it with a cross binutils.
> > >
> > > I think this is just that the test needs modifying for x86_64's
> > > rather large pagesize. If I add -z max-page-size=0x1000, it passes.
> >
> > Why did it work before?
>
> It passed before because my old code handling bss segments excluded
> those with m->includes_filehdr or m->includes_phdrs from the voff
> adjustments.
>
> > Why large page size is a problem?
>
> Large page size allows the first segment to contain the file header
> and program headers as well as .bss1
>
> > Is the output correct for large page?
>
> The ELF section headers and program headers are correct but not
> optimal. When a bss segment also contains the file or program
> headers, the following code allocates file space unnecessarily.
>
> if (p->p_type == PT_LOAD
> || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
> {
> if (! m->includes_filehdr && ! m->includes_phdrs)
> p->p_offset = off;
> else
> {
> file_ptr adjust;
>
> adjust = off - (p->p_offset + p->p_filesz);
> p->p_filesz += adjust;
> p->p_memsz += adjust;
> }
> }
>
> The p_filesz adjust should really only happen if sections mapped to
> the segment need file space. This bug has been around forever, but
> note that it's not incorrect to allocated zero-filled file space for
> bss sections, just unnecessary. However, allocating this space
Is there a way to fix this?
> confuses objdump (well, really bfd) into incorrectly calculating
> lma for .mtext. You'll recall that ELF files don't store lmas for
> sections, so bfd calculates lma from the section vma and program
> header info. The trouble is that ELF files also don't store section
> to segment mapping, and bfd mistakenly thinks that the first program
> header is the correct one for .mtext (readelf has similar confusion),
> and thus calculates an incorrect lma for .mtext.
I will see if there is anything I can do to fix objump/readelf.
Thanks.
H.J.