* config/tc-arm.c (arm_fix_adjustable): For COFF, convert fixups against

symbols which are not going to be placed into the symbol table.
* coffcode.h (coff_write_relocs): Produce an error message if a an
   out-of-range symbol index is detected in a reloc.
This commit is contained in:
Nick Clifton 2006-05-09 11:47:48 +00:00
parent 8c9f705ebb
commit 337ff0a5af
4 changed files with 43 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2006-05-09 Nick Clifton <nickc@redhat.com>
* coffcode.h (coff_write_relocs): Produce an error message if a an
out-of-range symbol index is detected in a reloc.
2006-05-09 Ben Elliston <bje@au.ibm.com>
* elf64-ppc.c (ppc64_elf_finish_dynamic_symbol): Remove unused

View file

@ -2532,11 +2532,15 @@ coff_write_relocs (bfd * abfd, int first_undef)
else
{
n.r_symndx = get_index ((*(q->sym_ptr_ptr)));
/* Take notice if the symbol reloc points to a symbol
we don't have in our symbol table. What should we
do for this?? */
/* Check to see if the symbol reloc points to a symbol
we don't have in our symbol table. */
if (n.r_symndx > obj_conv_table_size (abfd))
abort ();
{
bfd_set_error (bfd_error_bad_value);
_bfd_error_handler (_("%B: reloc against a non-existant symbol index: %ld"),
abfd, n.r_symndx);
return FALSE;
}
}
}

View file

@ -1,3 +1,9 @@
2006-05-09 Nick Clifton <nickc@redhat.com>
* config/tc-arm.c (arm_fix_adjustable): For COFF, convert fixups
against symbols which are not going to be placed into the symbol
table.
2006-05-09 Ben Elliston <bje@au.ibm.com>
* expr.c (operand): Remove `if (0 && ..)' statement and

View file

@ -17003,17 +17003,35 @@ arm_force_relocation (struct fix * fixp)
}
#ifdef OBJ_COFF
/* This is a little hack to help the gas/arm/adrl.s test. It prevents
local labels from being added to the output symbol table when they
are used with the ADRL pseudo op. The ADRL relocation should always
be resolved before the binbary is emitted, so it is safe to say that
it is adjustable. */
bfd_boolean
arm_fix_adjustable (fixS * fixP)
{
/* This is a little hack to help the gas/arm/adrl.s test. It prevents
local labels from being added to the output symbol table when they
are used with the ADRL pseudo op. The ADRL relocation should always
be resolved before the binbary is emitted, so it is safe to say that
it is adjustable. */
if (fixP->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
return 1;
/* This is a hack for the gas/all/redef2.s test. This test causes symbols
to be cloned, and without this test relocs would still be generated
against the original pre-cloned symbol. Such symbols would not appear
in the symbol table however, and so a valid reloc could not be
generated. So check to see if the fixup is against a symbol which has
been removed from the symbol chain, and if it is, then allow it to be
adjusted into a reloc against a section symbol. */
if (fixP->fx_addsy != NULL)
{
symbolS * sym;
for (sym = symbol_rootP; sym != NULL; sym = symbol_next (sym))
if (sym == fixP->fx_addsy)
break;
if (sym == NULL)
return 1;
}
return 0;
}
#endif