diff options
author | DJ Delorie <dj@redhat.com> | 2011-01-27 22:38:32 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2011-01-27 22:38:32 +0000 |
commit | eb6fae196b8dcb572108471a24e4777bcdd6e897 (patch) | |
tree | 4f352a937d6f5cdf9870e5c9ef05b2ab8670cae4 /gas/config/tc-rx.c | |
parent | 9f41c7318108a40272db5f81d877adcc3e0e9d6b (diff) | |
download | gdb-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.c | 21 |
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; |