aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-rx.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2011-01-27 22:38:32 +0000
committerDJ Delorie <dj@redhat.com>2011-01-27 22:38:32 +0000
commiteb6fae196b8dcb572108471a24e4777bcdd6e897 (patch)
tree4f352a937d6f5cdf9870e5c9ef05b2ab8670cae4 /gas/config/tc-rx.c
parent9f41c7318108a40272db5f81d877adcc3e0e9d6b (diff)
downloadgdb-eb6fae196b8dcb572108471a24e4777bcdd6e897.zip
gdb-eb6fae196b8dcb572108471a24e4777bcdd6e897.tar.gz
gdb-eb6fae196b8dcb572108471a24e4777bcdd6e897.tar.bz2
* config/tc-rx.c (md_convert_frag): If we can't compute the target
address, zero out the values stored in the object file to make objdump's output consistent.
Diffstat (limited to 'gas/config/tc-rx.c')
-rw-r--r--gas/config/tc-rx.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/gas/config/tc-rx.c b/gas/config/tc-rx.c
index d198050..a003c36 100644
--- a/gas/config/tc-rx.c
+++ b/gas/config/tc-rx.c
@@ -1603,20 +1603,29 @@ md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED,
&& fragP->tc_frag_data->relax[0].type == RX_RELAX_DISP)
ri = 1;
+ /* We used a new frag for this opcode, so the opcode address should
+ be the frag address. */
+ mypc = fragP->fr_address + (fragP->fr_opcode - fragP->fr_literal);
+
/* Try to get the target address. If we fail here, we just use the
largest format. */
if (rx_frag_fix_value (fragP, segment, 0, & addr0,
fragP->tc_frag_data->relax[ri].type != RX_RELAX_BRANCH, 0))
- keep_reloc = 1;
+ {
+ /* We don't know the target address. */
+ keep_reloc = 1;
+ addr0 = 0;
+ disp = 0;
+ }
+ else
+ {
+ /* We know the target address, and it's in addr0. */
+ disp = (int) addr0 - (int) mypc;
+ }
if (linkrelax)
keep_reloc = 1;
- /* We used a new frag for this opcode, so the opcode address should
- be the frag address. */
- mypc = fragP->fr_address + (fragP->fr_opcode - fragP->fr_literal);
- disp = (int) addr0 - (int) mypc;
-
reloc_type = BFD_RELOC_NONE;
reloc_adjust = 0;