* 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:
parent
8c9f705ebb
commit
337ff0a5af
4 changed files with 43 additions and 10 deletions
|
@ -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>
|
2006-05-09 Ben Elliston <bje@au.ibm.com>
|
||||||
|
|
||||||
* elf64-ppc.c (ppc64_elf_finish_dynamic_symbol): Remove unused
|
* elf64-ppc.c (ppc64_elf_finish_dynamic_symbol): Remove unused
|
||||||
|
|
|
@ -2532,11 +2532,15 @@ coff_write_relocs (bfd * abfd, int first_undef)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
n.r_symndx = get_index ((*(q->sym_ptr_ptr)));
|
n.r_symndx = get_index ((*(q->sym_ptr_ptr)));
|
||||||
/* Take notice if the symbol reloc points to a symbol
|
/* Check to see if the symbol reloc points to a symbol
|
||||||
we don't have in our symbol table. What should we
|
we don't have in our symbol table. */
|
||||||
do for this?? */
|
|
||||||
if (n.r_symndx > obj_conv_table_size (abfd))
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
2006-05-09 Ben Elliston <bje@au.ibm.com>
|
||||||
|
|
||||||
* expr.c (operand): Remove `if (0 && ..)' statement and
|
* expr.c (operand): Remove `if (0 && ..)' statement and
|
||||||
|
|
|
@ -17003,17 +17003,35 @@ arm_force_relocation (struct fix * fixp)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OBJ_COFF
|
#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
|
bfd_boolean
|
||||||
arm_fix_adjustable (fixS * fixP)
|
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)
|
if (fixP->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
|
||||||
return 1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue