This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH, MIPS] More meaningful error message on small-data overflow
- From: Adam Nemet <anemet at caviumnetworks dot com>
- To: binutils at sources dot redhat dot com
- Date: Thu, 19 Jul 2007 18:26:30 -0700
- Subject: [PATCH, MIPS] More meaningful error message on small-data overflow
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 ;).
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);
+ }
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;