aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>1999-05-29 10:47:20 +0000
committerNick Clifton <nickc@redhat.com>1999-05-29 10:47:20 +0000
commit661e4995b2be313b44100bb23152e86f25685f5e (patch)
tree3dedde4935375f9d219e035632dfd3e08153e6ba
parent3d4920d7c3bb7f69a8ef1bc7f64fbef8e8a04f2c (diff)
downloadgdb-661e4995b2be313b44100bb23152e86f25685f5e.zip
gdb-661e4995b2be313b44100bb23152e86f25685f5e.tar.gz
gdb-661e4995b2be313b44100bb23152e86f25685f5e.tar.bz2
Include pipeline offset in addend unless dealing with an old ABI.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-arm.c16
2 files changed, 12 insertions, 9 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 70b37ff..f698fd0 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+1999-05-28 Nick Clifton <nickc@cygnus.com>
+
+ * config/tc-arm.c (md_apply_fix3): Add pipeline offset into reloc
+ addend unless the target uses an old ABI.
+
Mon May 24 13:36:55 1999 Doug Evans <devans@canuck.cygnus.com>
-Wchar-subscripts cleanup
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index d898bf0..3d04600 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -486,7 +486,7 @@ static valueT md_chars_to_number PARAMS ((char *, int));
static void insert_reg_alias PARAMS ((char *, int));
static void output_inst PARAMS ((char *));
#ifdef OBJ_ELF
-static bfd_reloc_code_real_type arm_parse_reloc(void);
+static bfd_reloc_code_real_type arm_parse_reloc PARAMS ((void));
#endif
/* ARM instructions take 4bytes in the object file, Thumb instructions
@@ -5010,8 +5010,7 @@ md_atof (type, litP, sizeP)
return 0;
}
-/* The knowledge of the PC's pipeline offset is built into the relocs
- for the ELF port and into the insns themselves for the COFF port. */
+/* The knowledge of the PC's pipeline offset is built into the insns themselves. */
long
md_pcrel_from (fixP)
fixS * fixP;
@@ -5028,7 +5027,7 @@ md_pcrel_from (fixP)
for the calculation */
return (fixP->fx_where + fixP->fx_frag->fr_address) & ~3;
}
-
+
return fixP->fx_where + fixP->fx_frag->fr_address;
}
@@ -5179,7 +5178,8 @@ md_apply_fix3 (fixP, val, seg)
&& S_IS_DEFINED (fixP->fx_addsy)
&& S_GET_SEGMENT (fixP->fx_addsy) != seg)
{
- if (fixP->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH)
+ if (target_oabi
+ && fixP->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH)
value = 0;
else
value += md_pcrel_from (fixP);
@@ -5315,14 +5315,12 @@ md_apply_fix3 (fixP, val, seg)
case BFD_RELOC_ARM_PCREL_BRANCH:
newval = md_chars_to_number (buf, INSN_SIZE);
+
#ifdef OBJ_ELF
- newval &= 0xff000000;
if (! target_oabi)
value = fixP->fx_offset;
- else
-#else
- value = (value >> 2) & 0x00ffffff;
#endif
+ value = (value >> 2) & 0x00ffffff;
value = (value + (newval & 0x00ffffff)) & 0x00ffffff;
newval = value | (newval & 0xff000000);
md_number_to_chars (buf, newval, INSN_SIZE);