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: [PATCH, MIPS] More meaningful error message on small-data overflow


Adam Nemet wrote:
> With this patch before all the:
> 
>   relocation truncated to fit: R_MIPS_GPREL16 against ...
> 
> we also get the hopefully more meaningful:
> 
>   ../ld/ld-new: small-data section exceeds 64KB; lower small-data size limit (see -G with GCC)
> 
> I would be surprised if I got away with the GCC specific message but
> let me try ;).

So remove the "with GCC" part. :-)
Assembler and linker have this option as well.

> OK?
> 
> Adam
> 
> 
> 	* elfxx-mips.c (struct mips_elf_link_hash_table): Add new field
> 	small_data_overflow_reported.
> 	(_bfd_mips_elf_link_hash_table_create): Initialize it.
> 	(_bfd_mips_elf_relocate_section) <bfd_reloc_overflow>: Report
> 	small-data section overflow.
> 
> Index: elfxx-mips.c
> ===================================================================
> RCS file: /cvs/src/src/bfd/elfxx-mips.c,v
> retrieving revision 1.211
> diff -F^\([(a-zA-Z0-9_]\|#define\) -u -p -r1.211 elfxx-mips.c
> --- elfxx-mips.c	3 Jul 2007 14:26:42 -0000	1.211
> +++ elfxx-mips.c	20 Jul 2007 01:15:16 -0000
> @@ -325,6 +325,8 @@ struct mips_elf_link_hash_table
>    bfd_boolean mips16_stubs_seen;
>    /* True if we're generating code for VxWorks.  */
>    bfd_boolean is_vxworks;
> +  /* True if we already reported small-data section overflow.  */
> +  bfd_boolean small_data_overflow_reported;
>    /* Shortcuts to some dynamic sections, or NULL if they are not
>       being used.  */
>    asection *srelbss;
> @@ -8032,7 +8034,19 @@ _bfd_mips_elf_relocate_section (bfd *out
>  	    ;
>  	  else
>  	    {
> +	      struct mips_elf_link_hash_table *htab;
> +
> +	      htab = mips_elf_hash_table (info);
>  	      BFD_ASSERT (name != NULL);
> +	      if (!htab->small_data_overflow_reported
> +		  && howto->type == R_MIPS_GPREL16)
> +		{
> +		  const char *msg = "small-data section exceeds 64KB;"
> +		    " lower small-data size limit (see -G with GCC)";
> +
> +		  htab->small_data_overflow_reported = TRUE;
> +		  (*info->callbacks->einfo) (_("%P: %s\n"), msg);

I believe this breaks i18n.

> +		}
>  	      if (! ((*info->callbacks->reloc_overflow)
>  		     (info, NULL, name, howto->name, (bfd_vma) 0,
>  		      input_bfd, input_section, rel->r_offset)))
> @@ -10174,6 +10188,7 @@ _bfd_mips_elf_link_hash_table_create (bf
>    ret->rld_value = 0;
>    ret->mips16_stubs_seen = FALSE;
>    ret->is_vxworks = FALSE;
> +  ret->small_data_overflow_reported = FALSE;
>    ret->srelbss = NULL;
>    ret->sdynbss = NULL;
>    ret->srelplt = NULL;
> 


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