Fixes for use of ARM_26D reloc in arm-wince toolchain.

This commit is contained in:
Nick Clifton 2003-12-05 11:30:18 +00:00
parent 362ff85603
commit d3793eaa60
4 changed files with 41 additions and 22 deletions

View File

@ -1,3 +1,12 @@
2003-12-05 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
* coff-arm.c (aoutarm_std_reloc_howto [ARM_WINCE]): Set
partial_inplace for these relocs to FALSE for comptability with
the MS linker.
Remap ARM_26D relocation from 5 to 0. This fixes "bad fixup" error
generated by MS linker, and brings the relocation in line the MS
PE documentation.
2003-12-04 H.J. Lu <hongjiu.lu@intel.com>
* elf32-ppc.c (ppc_elf_relax_section): Don't check relax_finalizing.

View File

@ -252,11 +252,11 @@ coff_arm_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
#undef ARM_THUMB12
#undef ARM_26D
#define ARM_26D 0
#define ARM_32 1
#define ARM_RVA32 2
#define ARM_26 3
#define ARM_THUMB12 4
#define ARM_26D 5
#define ARM_SECTION 14
#define ARM_SECREL 15
#endif
@ -264,7 +264,19 @@ coff_arm_reloc (abfd, reloc_entry, symbol, data, input_section, output_bfd,
static reloc_howto_type aoutarm_std_reloc_howto[] =
{
#ifdef ARM_WINCE
EMPTY_HOWTO (-1),
HOWTO (ARM_26D,
2,
2,
24,
FALSE,
0,
complain_overflow_dont,
aoutarm_fix_pcrel_26_done,
"ARM_26D",
FALSE,
0x00ffffff,
0x0,
FALSE),
HOWTO (ARM_32,
0,
2,
@ -274,7 +286,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_32",
TRUE,
FALSE,
0xffffffff,
0xffffffff,
PCRELOFFSET),
@ -287,7 +299,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_RVA32",
TRUE,
FALSE,
0xffffffff,
0xffffffff,
PCRELOFFSET),
@ -317,19 +329,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
0x000007ff,
0x000007ff,
PCRELOFFSET),
HOWTO (ARM_26D,
2,
2,
24,
FALSE,
0,
complain_overflow_dont,
aoutarm_fix_pcrel_26_done,
"ARM_26D",
TRUE,
0x00ffffff,
0x0,
FALSE),
EMPTY_HOWTO (-1),
EMPTY_HOWTO (-1),
EMPTY_HOWTO (-1),
EMPTY_HOWTO (-1),
@ -346,8 +346,8 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
0,
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_16",
TRUE,
"ARM_SECTION",
FALSE,
0x0000ffff,
0x0000ffff,
PCRELOFFSET),
@ -359,8 +359,8 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
0,
complain_overflow_bitfield,
coff_arm_reloc,
"ARM_32",
TRUE,
"ARM_SECREL",
FALSE,
0xffffffff,
0xffffffff,
PCRELOFFSET),

View File

@ -1,3 +1,8 @@
2003-12-05 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
* pe-dll.c (generate_reloc): Remap ARM_26D relocation from 5 to
0. This fixes "bad fixup" error generated by MS linker.
2003-12-04 H.J. Lu <hongjiu.lu@intel.com>
* emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Set

View File

@ -1155,7 +1155,12 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info)
total_relocs++;
break;
case BITS_AND_SHIFT (24, 2):
if (relocs[i]->howto->type == 5)
/* FIXME: 0 is ARM_26D, it is defined in bfd/coff-arm.c
Those ARM_xxx definitions should go in proper
header someday. */
if (relocs[i]->howto->type == 0
/* Older GNU linkers used 5 instead of 0 for this reloc. */
|| relocs[i]->howto->type == 5)
/* This is an ARM_26D reloc, which is an ARM_26 reloc
that has already been fully processed during a
previous link stage, so ignore it here. */