This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: bfd/elf32-arm.c build breakage
- From: Alan Modra <amodra at gmail dot com>
- To: Thomas Preudhomme <thomas dot preudhomme at foss dot arm dot com>
- Cc: binutils at sourceware dot org, "Maciej W. Rozycki" <macro at imgtec dot com>
- Date: Wed, 18 May 2016 15:47:58 +0930
- Subject: Re: bfd/elf32-arm.c build breakage
- Authentication-results: sourceware.org; auth=none
- References: <alpine dot DEB dot 2 dot 00 dot 1604300408480 dot 21846 at tp dot orcam dot me dot uk> <1791612 dot JvV0be8Ar9 at e108577-lin> <20160517014106 dot GH24091 at bubble dot grove dot modra dot org> <1509984 dot dbhicChkuv at e108577-lin>
On Tue, May 17, 2016 at 11:24:35AM +0100, Thomas Preudhomme wrote:
> On Tuesday 17 May 2016 11:11:07 Alan Modra wrote:
> > On Mon, May 16, 2016 at 11:16:10AM +0100, Thomas Preudhomme wrote:
> > > Ok, I finally managed to reproduce. I needed to build with -O3. The patch
> > > fixes the warning. Let me do a bit more tests and then I'll submit it.
> >
> > Something like this, I expect.
> >
> > diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
> > index 65b593a..f67c59a 100644
> > --- a/bfd/elf32-arm.c
> > +++ b/bfd/elf32-arm.c
> > @@ -5663,6 +5663,15 @@ elf32_arm_size_stubs (bfd *output_bfd,
> > != 0)
> > goto error_ret_free_local;
> > }
> > +
> > + if (local_syms != NULL
> > + && symtab_hdr->contents != (unsigned char *) local_syms)
> > + {
>
> Oops, I had missed that normal exiting of the block was not handled.
>
> > + if (!info->keep_memory)
> > + free (local_syms);
> > + else
> > + symtab_hdr->contents = (unsigned char *) local_syms;
>
> Should we make that check at the error_ret_free_local label as well?
I think it's slightly better to not cache the symbols. There isn't
much point in optimizing an error path, and it's more conservative to
free memory. Committing with this ChangeLog:
* elf32-arm.c (elf32_arm_size_stubs): Free or cache local syms
for each BFD. Don't goto error_ret_free_local from outside loop.
--
Alan Modra
Australia Development Lab, IBM