This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH, MIPS] More meaningful error message on small-data overflow
- From: Thiemo Seufer <ths at networkno dot de>
- To: Adam Nemet <anemet at caviumnetworks dot com>
- Cc: binutils at sources dot redhat dot com
- Date: Fri, 20 Jul 2007 17:45:31 +0100
- Subject: Re: [PATCH, MIPS] More meaningful error message on small-data overflow
- References: <18080.3910.460680.889338@localhost.localdomain>
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;
>