This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: bfd/elf32-arm.c build breakage


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]