From af69206070ccb02c8253df2c9e995c5ee4921273 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 16 Feb 2007 10:24:48 +0000 Subject: [PATCH] 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. --- opcodes/ChangeLog | 9 +++++++++ opcodes/avr-dis.c | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 1164417479..72609eff89 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,12 @@ +2007-02-16 Nick Clifton + + 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 * 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 0a2bd36144..aea807e925 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)); -- 2.34.1