bfd/elf32-arm.c build breakage
Thomas Preudhomme
thomas.preudhomme@foss.arm.com
Tue May 17 10:24:00 GMT 2016
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?
> + }
> }
Can't we instead move error_ret_free_internal and error_ret_free_local at this
location and rewrite the if (r_type >= (unsigned int) R_ARM_max) to call
bfd_set_error and then use goto? That would avoid some code duplication,
wouldn't it?
>
> if (prev_num_a8_fixes != num_a8_fixes)
> @@ -5694,7 +5703,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
> a8_fixes[i].section, htab);
>
> if (stub_sec == NULL)
> - goto error_ret_free_local;
> + return FALSE;
>
> stub_sec->size
> += find_stub_size_and_template (a8_fixes[i].stub_type, NULL,
That's the bit I was going to send today indeed.
Best regards,
Thomas
More information about the Binutils
mailing list