summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2007-02-16 10:24:48 +0000
committerNick Clifton <nickc@redhat.com>2007-02-16 10:24:48 +0000
commitaf69206070ccb02c8253df2c9e995c5ee4921273 (patch)
tree57c1c1a095203842335bddb1eedb6d96de276de9
parente7ff5c732e7b95aafccd0910ea1a5cb8251a1033 (diff)
downloadbinutils-gdb-af69206070ccb02c8253df2c9e995c5ee4921273.tar.gz
PR binutils/4045
* avr-dis.c (comment_start): New variable, contains the prefix to use when printing addresses in comments. (print_insn_avr): Set comment_start to an empty space if there is no symbol table available as the generic address printing code will prefix the numeric value of the address with 0x.
-rw-r--r--opcodes/ChangeLog9
-rw-r--r--opcodes/avr-dis.c17
2 files changed, 22 insertions, 4 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 11644174790..72609eff895 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,12 @@
+2007-02-16 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/4045
+ * avr-dis.c (comment_start): New variable, contains the prefix to
+ use when printing addresses in comments.
+ (print_insn_avr): Set comment_start to an empty space if there is
+ no symbol table available as the generic address printing code
+ will prefix the numeric value of the address with 0x.
+
2007-02-13 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c: Updated to use an array of MAX_OPERANDS operands
diff --git a/opcodes/avr-dis.c b/opcodes/avr-dis.c
index 0a2bd361444..aea807e9255 100644
--- a/opcodes/avr-dis.c
+++ b/opcodes/avr-dis.c
@@ -43,6 +43,8 @@ const struct avr_opcodes_s avr_opcodes[] =
{NULL, NULL, NULL, 0, 0, 0}
};
+static const char * comment_start = "0x";
+
static int
avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constraint,
char *buf, char *comment, int regs, int *sym, bfd_vma *sym_addr)
@@ -144,8 +146,7 @@ avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constra
value of the address only once, but this would mean recoding
objdump_print_address() which would affect many targets. */
sprintf (buf, "%#lx", (unsigned long) *sym_addr);
- sprintf (comment, "0x");
-
+ sprintf (comment, comment_start);
break;
case 'L':
@@ -154,17 +155,18 @@ avr_operand (unsigned int insn, unsigned int insn2, unsigned int pc, int constra
sprintf (buf, ".%+-8d", rel_addr);
*sym = 1;
*sym_addr = pc + 2 + rel_addr;
- sprintf (comment, "0x");
+ sprintf (comment, comment_start);
}
break;
case 'l':
{
int rel_addr = ((((insn >> 3) & 0x7f) ^ 0x40) - 0x40) * 2;
+
sprintf (buf, ".%+-8d", rel_addr);
*sym = 1;
*sym_addr = pc + 2 + rel_addr;
- sprintf (comment, "0x");
+ sprintf (comment, comment_start);
}
break;
@@ -267,10 +269,17 @@ print_insn_avr (bfd_vma addr, disassemble_info *info)
int sym_op1 = 0, sym_op2 = 0;
bfd_vma sym_addr1, sym_addr2;
+
if (!initialized)
{
unsigned int nopcodes;
+ /* PR 4045: Try to avoid duplicating the 0x prefix that
+ objdump_print_addr() will put on addresses when there
+ is no symbol table available. */
+ if (info->symtab_size == 0)
+ comment_start = " ";
+
nopcodes = sizeof (avr_opcodes) / sizeof (struct avr_opcodes_s);
avr_bin_masks = xmalloc (nopcodes * sizeof (unsigned int));