* config/tc-arm.c (arm_force_relocation): Move out of #if OBJ_ELF.
Move OBJ_COFF TC_FORCE_RELOCATION code here so that COFF handles ARM_IMMEDIATE and ARM_ADRL_IMMEDIATE relocs as for ELF. * config/tc-arm.h (TC_FORCE_RELOCATION): Define for both ELF and COFF to call arm_force_relocation.
This commit is contained in:
parent
d1973055b8
commit
114424c6b3
3 changed files with 38 additions and 25 deletions
|
@ -1,3 +1,11 @@
|
|||
2002-12-05 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* config/tc-arm.c (arm_force_relocation): Move out of #if OBJ_ELF.
|
||||
Move OBJ_COFF TC_FORCE_RELOCATION code here so that COFF handles
|
||||
ARM_IMMEDIATE and ARM_ADRL_IMMEDIATE relocs as for ELF.
|
||||
* config/tc-arm.h (TC_FORCE_RELOCATION): Define for both ELF and
|
||||
COFF to call arm_force_relocation.
|
||||
|
||||
2002-12-04 David Mosberger <davidm@hpl.hp.com>
|
||||
|
||||
* config/tc-ia64.c (pseudo_func): Add "@pause" constant for "hint"
|
||||
|
|
|
@ -11432,6 +11432,32 @@ arm_validate_fix (fixP)
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
arm_force_relocation (fixp)
|
||||
struct fix * fixp;
|
||||
{
|
||||
#if defined (OBJ_COFF) && defined (TE_PE)
|
||||
if (fixp->fx_r_type == BFD_RELOC_RVA)
|
||||
return 1;
|
||||
#endif
|
||||
#ifdef OBJ_ELF
|
||||
if ( fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
|
||||
|| fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY
|
||||
|| fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH
|
||||
|| fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX
|
||||
|| fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX
|
||||
|| fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23)
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
/* Resolve these relocations even if the symbol is extern or weak. */
|
||||
if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
|
||||
|| fixp->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
|
||||
return 0;
|
||||
|
||||
return S_FORCE_RELOC (fixp->fx_addsy);
|
||||
}
|
||||
|
||||
#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
|
||||
|
@ -11448,6 +11474,7 @@ arm_fix_adjustable (fixP)
|
|||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef OBJ_ELF
|
||||
/* Relocations against Thumb function names must be left unadjusted,
|
||||
so that the linker can use this information to correctly set the
|
||||
|
@ -11514,26 +11541,6 @@ armelf_frob_symbol (symp, puntp)
|
|||
elf_frob_symbol (symp, puntp);
|
||||
}
|
||||
|
||||
int
|
||||
arm_force_relocation (fixp)
|
||||
struct fix * fixp;
|
||||
{
|
||||
if ( fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
|
||||
|| fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY
|
||||
|| fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH
|
||||
|| fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX
|
||||
|| fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX
|
||||
|| fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23)
|
||||
return 1;
|
||||
|
||||
/* Resolve these relocations even if the symbol is extern or weak. */
|
||||
if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
|
||||
|| fixp->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
|
||||
return 0;
|
||||
|
||||
return S_FORCE_RELOC (fixp->fx_addsy);
|
||||
}
|
||||
|
||||
static bfd_reloc_code_real_type
|
||||
arm_parse_reloc ()
|
||||
{
|
||||
|
|
|
@ -77,8 +77,6 @@ struct fix;
|
|||
|
||||
#ifdef OBJ_COFF
|
||||
# if defined TE_PE
|
||||
# define TC_FORCE_RELOCATION(x) \
|
||||
((x)->fx_r_type == BFD_RELOC_RVA || S_FORCE_RELOC ((x)->fx_addsy))
|
||||
# ifdef TE_EPOC
|
||||
# define TARGET_FORMAT (target_big_endian ? "epoc-pe-arm-big" : "epoc-pe-arm-little")
|
||||
# else
|
||||
|
@ -92,11 +90,11 @@ struct fix;
|
|||
#ifdef OBJ_ELF
|
||||
# define TARGET_FORMAT elf32_arm_target_format()
|
||||
extern const char * elf32_arm_target_format PARAMS ((void));
|
||||
|
||||
# define TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX)
|
||||
extern int arm_force_relocation PARAMS ((struct fix *));
|
||||
#endif
|
||||
|
||||
#define TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX)
|
||||
extern int arm_force_relocation PARAMS ((struct fix *));
|
||||
|
||||
#define md_convert_frag(b, s, f) {as_fatal (_("arm convert_frag\n"));}
|
||||
|
||||
#define md_cleanup() arm_cleanup ()
|
||||
|
|
Loading…
Reference in a new issue