aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2003-12-05 11:30:18 +0000
committerNick Clifton <nickc@redhat.com>2003-12-05 11:30:18 +0000
commitd3793eaa607bc918758f22d4939a2080485770e6 (patch)
tree28596cf403c68f9f8b04aef033d2ccfc6c78c091
parent362ff856039fd10e1dc996d424d03dc02d410e5f (diff)
downloadgdb-d3793eaa607bc918758f22d4939a2080485770e6.zip
gdb-d3793eaa607bc918758f22d4939a2080485770e6.tar.gz
gdb-d3793eaa607bc918758f22d4939a2080485770e6.tar.bz2
Fixes for use of ARM_26D reloc in arm-wince toolchain.
-rw-r--r--bfd/ChangeLog9
-rw-r--r--bfd/coff-arm.c42
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/pe-dll.c7
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 <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.
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 <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
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. */