diff options
-rw-r--r-- | sim/arm/wrapper.c | 15 | ||||
-rw-r--r-- | sim/common/cgen-trace.c | 19 | ||||
-rw-r--r-- | sim/common/cgen-trace.h | 1 | ||||
-rw-r--r-- | sim/common/sim-trace.c | 14 | ||||
-rw-r--r-- | sim/cris/sim-if.c | 3 | ||||
-rw-r--r-- | sim/erc32/interf.c | 3 | ||||
-rw-r--r-- | sim/erc32/sis.c | 18 | ||||
-rw-r--r-- | sim/erc32/sis.h | 3 | ||||
-rw-r--r-- | sim/m32c/trace.c | 14 | ||||
-rw-r--r-- | sim/rl78/trace.c | 14 | ||||
-rw-r--r-- | sim/rx/trace.c | 14 |
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); |