From eb6fae196b8dcb572108471a24e4777bcdd6e897 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Thu, 27 Jan 2011 22:38:32 +0000 Subject: [PATCH] * 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. --- gas/ChangeLog | 6 ++++++ gas/config/tc-rx.c | 21 +++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index d6e3c2198c7..67a37727ba1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2011-01-27 DJ Delorie + + * 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. + 2011-01-26 Kai Tietz * config/tc-i386.c (md_begin): Set for x64 windows COFF target diff --git a/gas/config/tc-rx.c b/gas/config/tc-rx.c index d1980509823..a003c360732 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;