From d3793eaa607bc918758f22d4939a2080485770e6 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 5 Dec 2003 11:30:18 +0000 Subject: [PATCH] Fixes for use of ARM_26D reloc in arm-wince toolchain. --- bfd/ChangeLog | 9 +++++++++ bfd/coff-arm.c | 42 +++++++++++++++++++++--------------------- ld/ChangeLog | 5 +++++ ld/pe-dll.c | 7 ++++++- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ed92ab4..371f4a8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2003-12-05 Dmitry Semyonov + + * 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 * elf32-ppc.c (ppc_elf_relax_section): Don't check relax_finalizing. diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index ba8a736..9b26123 100644 --- a/bfd/coff-arm.c +++ b/bfd/coff-arm.c @@ -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), diff --git a/ld/ChangeLog b/ld/ChangeLog index bf844d1..de662ea 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2003-12-05 Dmitry Semyonov + + * 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 * emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Set diff --git a/ld/pe-dll.c b/ld/pe-dll.c index ebd3711..0542ace 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -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. */ -- 2.7.4