2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
+ * elf64-x86-64.c (elf_x86_64_relocate_section): Display signed
+ hex number in x32 addend overflow check.
+
+2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
+
* elf64-x86-64.c (elf_x86_64_reloc_type_class): Handle
R_X86_64_RELATIVE64.
!= (rel->r_addend & 0x80000000))
{
const char *name;
+ long addend = rel->r_addend;
if (h && h->root.root.string)
name = h->root.root.string;
else
name = bfd_elf_sym_name (input_bfd, symtab_hdr,
sym, NULL);
- (*_bfd_error_handler)
- (_("%B: addend %ld in relocation %s against "
- "symbol `%s' at 0x%lx in section `%A' is "
- "out of range"),
- input_bfd, input_section,
- (long) rel->r_addend,
- x86_64_elf_howto_table[r_type].name,
- name, (unsigned long) rel->r_offset);
+ if (addend < 0)
+ (*_bfd_error_handler)
+ (_("%B: addend -0x%lx in relocation %s against "
+ "symbol `%s' at 0x%lx in section `%A' is "
+ "out of range"),
+ input_bfd, input_section, addend,
+ x86_64_elf_howto_table[r_type].name,
+ name, (unsigned long) rel->r_offset);
+ else
+ (*_bfd_error_handler)
+ (_("%B: addend 0x%lx in relocation %s against "
+ "symbol `%s' at 0x%lx in section `%A' is "
+ "out of range"),
+ input_bfd, input_section, addend,
+ x86_64_elf_howto_table[r_type].name,
+ name, (unsigned long) rel->r_offset);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
+2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (tc_gen_reloc): Display signed hex number in
+ x32 addend overflow check.
+
2012-05-09 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (tc_gen_reloc): Use fits_in_signed_long.
/* Check addend overflow. */
if (!fits_in_signed_long (fixp->fx_offset))
{
- as_bad_where (fixp->fx_file, fixp->fx_line,
- _("cannot represent relocation %s with addend %lld in x32 mode"),
- bfd_get_reloc_code_name (code),
- (long long) fixp->fx_offset);
+ long long addend = fixp->fx_offset;
+ if (addend < 0)
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("cannot represent relocation %s with "
+ "addend -0x%llx in x32 mode"),
+ bfd_get_reloc_code_name (code), -addend);
+ else
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ _("cannot represent relocation %s with "
+ "addend 0x%llx in x32 mode"),
+ bfd_get_reloc_code_name (code), addend);
}
break;
case BFD_RELOC_X86_64_DTPOFF64:
2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
+ * ld-x86-64/ilp32-11.d: Updated.
+
+2012-05-10 H.J. Lu <hongjiu.lu@intel.com>
+
* ld-x86-64/pr13082-1a.d: Check RELACOUNT.
* ld-x86-64/pr13082-1b.d: Likewise.
#as: --x32
#ld: -shared -melf32_x86_64
-#error: .*addend 2147483647 in relocation R_X86_64_64 against symbol `.text' at 0x0 in section `.data.rel.local' is out of range
+#error: .*addend 0x7fffffff in relocation R_X86_64_64 against symbol `.text' at 0x0 in section `.data.rel.local' is out of range