summaryrefslogtreecommitdiff
path: root/opcodes
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 /opcodes
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.
Diffstat (limited to 'opcodes')
-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));