aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/arm/wrapper.c15
-rw-r--r--sim/common/cgen-trace.c19
-rw-r--r--sim/common/cgen-trace.h1
-rw-r--r--sim/common/sim-trace.c14
-rw-r--r--sim/cris/sim-if.c3
-rw-r--r--sim/erc32/interf.c3
-rw-r--r--sim/erc32/sis.c18
-rw-r--r--sim/erc32/sis.h3
-rw-r--r--sim/m32c/trace.c14
-rw-r--r--sim/rl78/trace.c14
-rw-r--r--sim/rx/trace.c14
11 files changed, 109 insertions, 9 deletions
diff --git a/sim/arm/wrapper.c b/sim/arm/wrapper.c
index ab56bc4..c97bae8 100644
--- a/sim/arm/wrapper.c
+++ b/sim/arm/wrapper.c
@@ -76,6 +76,19 @@ op_printf (char *buf, const char *fmt, ...)
return ret;
}
+static int ATTRIBUTE_PRINTF (3, 4)
+op_styled_printf (char *buf, enum disassembler_style style,
+ const char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static int
sim_dis_read (bfd_vma memaddr ATTRIBUTE_UNUSED,
bfd_byte * ptr,
@@ -321,7 +334,7 @@ sim_create_inferior (SIM_DESC sd ATTRIBUTE_UNUSED,
}
memset (& info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (abfd);
info.mach = bfd_get_mach (abfd);
diff --git a/sim/common/cgen-trace.c b/sim/common/cgen-trace.c
index 149ea8a..12f6126 100644
--- a/sim/common/cgen-trace.c
+++ b/sim/common/cgen-trace.c
@@ -320,6 +320,22 @@ sim_disasm_sprintf (SFILE *f, const char *format, ...)
return n;
}
+/* sprintf to a "stream" with styling. */
+
+int
+sim_disasm_styled_sprintf (SFILE *f, enum disassembler_style style,
+ const char *format, ...)
+{
+ int n;
+ va_list args;
+
+ va_start (args, format);
+ vsprintf (f->current, format, args);
+ f->current += n = strlen (f->current);
+ va_end (args);
+ return n;
+}
+
/* Memory read support for an opcodes disassembler. */
int
@@ -383,7 +399,8 @@ sim_cgen_disassemble_insn (SIM_CPU *cpu, const CGEN_INSN *insn,
sfile.buffer = sfile.current = buf;
INIT_DISASSEMBLE_INFO (disasm_info, (FILE *) &sfile,
- (fprintf_ftype) sim_disasm_sprintf);
+ (fprintf_ftype) sim_disasm_sprintf,
+ (fprintf_styled_ftype) sim_disasm_styled_sprintf);
disasm_info.endian =
(bfd_big_endian (STATE_PROG_BFD (sd)) ? BFD_ENDIAN_BIG
: bfd_little_endian (STATE_PROG_BFD (sd)) ? BFD_ENDIAN_LITTLE
diff --git a/sim/common/cgen-trace.h b/sim/common/cgen-trace.h
index 84b4935..3e2b4a9 100644
--- a/sim/common/cgen-trace.h
+++ b/sim/common/cgen-trace.h
@@ -78,6 +78,7 @@ typedef struct {
/* String printer for the disassembler. */
extern int sim_disasm_sprintf (SFILE *, const char *, ...) ATTRIBUTE_PRINTF_2;
+extern int sim_disasm_styled_sprintf (SFILE *, enum disassembler_style, const char *, ...) ATTRIBUTE_PRINTF_3;
/* For opcodes based disassemblers. */
#ifdef __BFD_H_SEEN__
diff --git a/sim/common/sim-trace.c b/sim/common/sim-trace.c
index 0b63bdb..952c351 100644
--- a/sim/common/sim-trace.c
+++ b/sim/common/sim-trace.c
@@ -906,6 +906,18 @@ dis_printf (SIM_CPU *cpu, const char *fmt, ...)
return 0;
}
+static int ATTRIBUTE_PRINTF (3, 4)
+dis_styled_printf (SIM_CPU *cpu, enum disassembler_style style,
+ const char *fmt, ...)
+{
+ SIM_DESC sd = CPU_STATE (cpu);
+ va_list ap;
+ va_start (ap, fmt);
+ trace_vprintf (sd, cpu, fmt, ap);
+ va_end (ap);
+ return 0;
+}
+
void
trace_disasm (SIM_DESC sd, sim_cpu *cpu, address_word addr)
{
@@ -922,7 +934,7 @@ trace_disasm (SIM_DESC sd, sim_cpu *cpu, address_word addr)
bfd_big_endian (trace_data->dis_bfd),
bfd_get_mach (trace_data->dis_bfd),
trace_data->dis_bfd);
- INIT_DISASSEMBLE_INFO (*info, cpu, dis_printf);
+ INIT_DISASSEMBLE_INFO (*info, cpu, dis_printf, dis_styled_printf);
info->read_memory_func = dis_read;
info->arch = bfd_get_arch (bfd);
info->mach = bfd_get_mach (bfd);
diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c
index c72edc7..3589f5b 100644
--- a/sim/cris/sim-if.c
+++ b/sim/cris/sim-if.c
@@ -1017,7 +1017,8 @@ cris_disassemble_insn (SIM_CPU *cpu,
sfile.buffer = sfile.current = buf;
INIT_DISASSEMBLE_INFO (disasm_info, (FILE *) &sfile,
- (fprintf_ftype) sim_disasm_sprintf);
+ (fprintf_ftype) sim_disasm_sprintf,
+ (fprintf_styled_ftype) sim_disasm_styled_sprintf);
disasm_info.endian = BFD_ENDIAN_LITTLE;
disasm_info.read_memory_func = sim_disasm_read_memory;
disasm_info.memory_error_func = sim_disasm_perror_memory;
diff --git a/sim/erc32/interf.c b/sim/erc32/interf.c
index d04d07c..78dec6f 100644
--- a/sim/erc32/interf.c
+++ b/sim/erc32/interf.c
@@ -244,7 +244,8 @@ sim_open (SIM_OPEN_KIND kind, struct host_callback_struct *callback,
#ifdef F_GETFL
termsave = fcntl(0, F_GETFL, 0);
#endif
- INIT_DISASSEMBLE_INFO(dinfo, stdout,(fprintf_ftype)fprintf);
+ INIT_DISASSEMBLE_INFO(dinfo, stdout,(fprintf_ftype)fprintf,
+ fprintf_styled);
#ifdef HOST_LITTLE_ENDIAN
dinfo.endian = BFD_ENDIAN_LITTLE;
#else
diff --git a/sim/erc32/sis.c b/sim/erc32/sis.c
index 66a27d0..12eb21f 100644
--- a/sim/erc32/sis.c
+++ b/sim/erc32/sis.c
@@ -139,6 +139,21 @@ run_sim(struct pstate *sregs, uint64_t icount, int dis)
}
int
+fprintf_styled (void *stream, enum disassembler_style style,
+ const char *fmt, ...)
+{
+ int ret;
+ FILE *out = (FILE *) stream;
+ va_list args;
+
+ va_start (args, fmt);
+ ret = vfprintf (out, fmt, args);
+ va_end (args);
+
+ return ret;
+}
+
+int
main(int argc, char **argv)
{
@@ -212,7 +227,8 @@ main(int argc, char **argv)
#endif
sregs.freq = freq;
- INIT_DISASSEMBLE_INFO(dinfo, stdout, (fprintf_ftype) fprintf);
+ INIT_DISASSEMBLE_INFO(dinfo, stdout, (fprintf_ftype) fprintf,
+ (fprintf_styled_ftype) fprintf_styled);
#ifdef HOST_LITTLE_ENDIAN
dinfo.endian = BFD_ENDIAN_LITTLE;
#else
diff --git a/sim/erc32/sis.h b/sim/erc32/sis.h
index 33f16c7..3a27667 100644
--- a/sim/erc32/sis.h
+++ b/sim/erc32/sis.h
@@ -18,6 +18,7 @@
#include "sim/sim.h"
#include <sim-config.h>
#include <stdint.h>
+#include "dis-asm.h"
#if HOST_BYTE_ORDER == BIG_ENDIAN
#define HOST_BIG_ENDIAN
@@ -203,6 +204,8 @@ extern void init_regs (struct pstate *sregs);
/* interf.c */
extern int run_sim (struct pstate *sregs,
uint64_t icount, int dis);
+extern int fprintf_styled (void *stream, enum disassembler_style style,
+ const char *fmt, ...) ATTRIBUTE_PRINTF (3, 4);
/* float.c */
extern int get_accex (void);
diff --git a/sim/m32c/trace.c b/sim/m32c/trace.c
index 571df1a..f5171c2 100644
--- a/sim/m32c/trace.c
+++ b/sim/m32c/trace.c
@@ -101,6 +101,18 @@ op_printf (char *buf, char *fmt, ...)
return ret;
}
+static int
+op_styled_printf (char *buf, enum disassembler_style style, char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static bfd *current_bfd;
void
@@ -210,7 +222,7 @@ sim_disasm_one (void)
{
initted = 1;
memset (&info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (current_bfd);
info.mach = bfd_get_mach (current_bfd);
diff --git a/sim/rl78/trace.c b/sim/rl78/trace.c
index df75d79..a485c4c 100644
--- a/sim/rl78/trace.c
+++ b/sim/rl78/trace.c
@@ -104,6 +104,18 @@ op_printf (char *buf, char *fmt, ...)
return ret;
}
+static int
+op_styled_printf (char *buf, enum disassembler_style style, char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static bfd * current_bfd = NULL;
static asymbol ** symtab = NULL;
static int symcount = 0;
@@ -205,7 +217,7 @@ sim_get_current_source_location (const char ** pfilename,
initted = 1;
memset (& info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (current_bfd);
info.mach = bfd_get_mach (current_bfd);
diff --git a/sim/rx/trace.c b/sim/rx/trace.c
index 6e9a266..df83dc1 100644
--- a/sim/rx/trace.c
+++ b/sim/rx/trace.c
@@ -109,6 +109,18 @@ op_printf (char *buf, char *fmt, ...)
return ret;
}
+static int ATTRIBUTE_PRINTF (3, 4)
+op_styled_printf (char *buf, enum disassembler_style style, char *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, fmt);
+ ret = vsprintf (opbuf + strlen (opbuf), fmt, ap);
+ va_end (ap);
+ return ret;
+}
+
static bfd * current_bfd = NULL;
static asymbol ** symtab = NULL;
static int symcount = 0;
@@ -209,7 +221,7 @@ sim_get_current_source_location (const char ** pfilename,
initted = 1;
memset (& info, 0, sizeof (info));
- INIT_DISASSEMBLE_INFO (info, stdout, op_printf);
+ INIT_DISASSEMBLE_INFO (info, stdout, op_printf, op_styled_printf);
info.read_memory_func = sim_dis_read;
info.arch = bfd_get_arch (current_bfd);
info.mach = bfd_get_mach (current_bfd);