[RFC/PATCH] Fix `bfd_{get,set}_*' macros

Alan Modra amodra@gmail.com
Thu May 3 07:54:00 GMT 2012


On Thu, May 03, 2012 at 01:19:21AM -0300, Sergio Durigan Junior wrote:
> 	* bfd-in2.h (bfd_get_section_name, bfd_get_section_vma,
> 	bfd_get_section_lma, bfd_get_section_alignment, bfd_section_name,
> 	bfd_section_size, bfd_get_section_flags,
> 	bfd_get_section_userdata): Rewrite macros in order to use the
> 	`bfd' argument.
> 	* elf-vxworks.c (elf_vxworks_finish_dynamic_entry): Pass proper `bfd'
> 	as the first argument for `bfd_get_section_alignment'.
> 	* elf32-arm.c (create_ifunc_sections): Likewise, for
> 	`bfd_set_section_alignment'.

The above is OK.  You guessed wrongly for all the bfd args below,
except in elf64-ppc.c.  I suggest expanding the macros instead.  I've
noted the correct bfds below but IMO these macros serve no useful
purpose.

> 	* elf32-m32r.c (m32r_elf_relocate_section): Likewise, for
> 	`bfd_get_section_name'.
> 	* elf32-microblaze.c (microblaze_elf_relocate_section): Likewise.
> 	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise.
> 	(ppc_elf_relocate_section): Likewise.
> 	* elf64-mmix.c (mmix_final_link_relocate): Declaring proper `bfd'
> 	variable.
> 	* elf64-ppc.c (create_linkage_sections): Pass proper `bfd' as the
> 	first argument for `bfd_set_section_alignment'.

> --- a/bfd/elf32-m32r.c
> +++ b/bfd/elf32-m32r.c
> @@ -3007,7 +3007,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
>  		const char *name;
>  
>  		BFD_ASSERT (sec != NULL);
> -		name = bfd_get_section_name (abfd, sec);
> +		name = bfd_get_section_name (input_bfd, sec);

sec->owner

> --- a/bfd/elf32-microblaze.c
> +++ b/bfd/elf32-microblaze.c
> @@ -839,7 +839,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
>  		/* Only relocate if the symbol is defined.  */
>  		if (sec)
>  		  {
> -		    name = bfd_get_section_name (abfd, sec);
> +		    name = bfd_get_section_name (input_bfd, sec);

sec->owner

> @@ -868,7 +868,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
>  					       bfd_get_filename (input_bfd),
>  					       sym_name,
>  					       microblaze_elf_howto_table[(int) r_type]->name,
> -					       bfd_get_section_name (abfd, sec));
> +					       bfd_get_section_name (input_bfd, sec));

sec->owner

> @@ -884,7 +884,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
>  		/* Only relocate if the symbol is defined.  */
>  		if (sec)
>  		  {
> -		    name = bfd_get_section_name (abfd, sec);
> +		    name = bfd_get_section_name (input_bfd, sec);

sec->owner

> @@ -913,7 +913,7 @@ microblaze_elf_relocate_section (bfd *output_bfd,
>  					       bfd_get_filename (input_bfd),
>  					       sym_name,
>  					       microblaze_elf_howto_table[(int) r_type]->name,
> -					       bfd_get_section_name (abfd, sec));
> +					       bfd_get_section_name (input_bfd, sec));

sec->owner

> --- a/bfd/elf32-ppc.c
> +++ b/bfd/elf32-ppc.c
> @@ -5867,7 +5867,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
>  	{
>  	  /* Strip these too.  */
>  	}
> -      else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela"))
> +      else if (CONST_STRNEQ (bfd_get_section_name (ibfd, s), ".rela"))

htab->elf.dynobj

> @@ -7886,8 +7886,10 @@ ppc_elf_relocate_section (bfd *output_bfd,
>  	      unresolved_reloc = TRUE;
>  	      break;
>  	    }
> -	  BFD_ASSERT (strcmp (bfd_get_section_name (abfd, sec), ".got") == 0
> -		      || strcmp (bfd_get_section_name (abfd, sec), ".cgot") == 0);
> +	  BFD_ASSERT (strcmp (bfd_get_section_name (input_bfd, sec),
> +			      ".got") == 0
> +		      || strcmp (bfd_get_section_name (input_bfd, sec),
> +				 ".cgot") == 0);

sec->owner twice

> @@ -7937,7 +7939,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
>  	      }
>  	    addend -= SYM_VAL (sda);
>  
> -	    name = bfd_get_section_name (abfd, sec->output_section);
> +	    name = bfd_get_section_name (input_bfd, sec->output_section);

output_bfd

> @@ -7969,7 +7971,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
>  	      }
>  	    addend -= SYM_VAL (sda);
>  
> -	    name = bfd_get_section_name (abfd, sec->output_section);
> +	    name = bfd_get_section_name (input_bfd, sec->output_section);

output_bfd

> @@ -7998,7 +8000,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
>  		break;
>  	      }
>  
> -	    name = bfd_get_section_name (abfd, sec->output_section);
> +	    name = bfd_get_section_name (input_bfd, sec->output_section);

output_bfd

> --- a/bfd/elf64-mmix.c
> +++ b/bfd/elf64-mmix.c
> @@ -1771,6 +1771,8 @@ mmix_final_link_relocate (reloc_howto_type *howto, asection *input_section,
>  	first_global = 255;
>        else
>  	{
> +	  bfd *abfd = NULL;
> +
>  	  first_global = bfd_get_section_vma (abfd, regsec) / 8;

input_section->output_section->owner

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list