| Index: sim/msp430/trace.c
|
| diff --git a/sim/rl78/trace.c b/sim/msp430/trace.c
|
| similarity index 82%
|
| copy from sim/rl78/trace.c
|
| copy to sim/msp430/trace.c
|
| index f0c98c4b646b37ecc7ddeccf26123cb5cb55d83f..a86ea881c10adba5f76785f7c8952d59e2a70ffb 100644
|
| --- a/sim/rl78/trace.c
|
| +++ b/sim/msp430/trace.c
|
| @@ -1,6 +1,6 @@
|
| -/* trace.c --- tracing output for the RL78 simulator.
|
| +/* trace.c --- tracing output for the MSP430 simulator.
|
|
|
| - Copyright (C) 2005, 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2005, 2007-2013 Free Software Foundation, Inc.
|
| Contributed by Red Hat, Inc.
|
|
|
| This file is part of the GNU simulators.
|
| @@ -33,15 +33,10 @@
|
| #include "bfd.h"
|
| #include "dis-asm.h"
|
|
|
| -#include "cpu.h"
|
| -#include "mem.h"
|
| -#include "load.h"
|
| -
|
| static int
|
| sim_dis_read (bfd_vma memaddr, bfd_byte * ptr, unsigned int length,
|
| struct disassemble_info *info)
|
| {
|
| - mem_get_blk (memaddr, ptr, length);
|
| return 0;
|
| }
|
|
|
| @@ -52,7 +47,7 @@ sim_dis_read (bfd_vma memaddr, bfd_byte * ptr, unsigned int length,
|
| static long
|
| remove_useless_symbols (asymbol ** symbols, long count)
|
| {
|
| - register asymbol **in_ptr = symbols, **out_ptr = symbols;
|
| + asymbol **in_ptr = symbols, **out_ptr = symbols;
|
|
|
| while (-- count >= 0)
|
| {
|
| @@ -67,6 +62,14 @@ remove_useless_symbols (asymbol ** symbols, long count)
|
| if (bfd_is_und_section (sym->section)
|
| || bfd_is_com_section (sym->section))
|
| continue;
|
| +
|
| + if (sym->name[0] == '.' && sym->name[1] == 'L')
|
| + continue;
|
| +
|
| + /* If the symbol ends in ^A or ^B it is
|
| + an assembler generated local label. */
|
| + if (sym->name[strlen (sym->name) - 1] < 32)
|
| + continue;
|
|
|
| *out_ptr++ = sym;
|
| }
|
| @@ -108,7 +111,7 @@ static bfd_vma code_base = 0;
|
| static struct disassemble_info info;
|
|
|
| void
|
| -sim_disasm_init (bfd *prog)
|
| +msp430_trace_init (bfd *prog)
|
| {
|
| current_bfd = prog;
|
| }
|
| @@ -181,15 +184,18 @@ load_file_and_line (const char *filename, int lineno)
|
| }
|
|
|
| int
|
| -sim_get_current_source_location (const char ** pfilename,
|
| - const char ** pfunctionname,
|
| - unsigned int * plineno)
|
| +msp430_get_current_source_location (int mypc,
|
| + const char ** pfilename,
|
| + const char ** pfunctionname,
|
| + unsigned int * plineno)
|
| {
|
| static int initted = 0;
|
| - int mypc = pc;
|
|
|
| if (current_bfd == NULL)
|
| - return 0;
|
| + {
|
| + printf("no bfd\n");
|
| + return 0;
|
| + }
|
|
|
| if (!initted)
|
| {
|
| @@ -203,7 +209,7 @@ sim_get_current_source_location (const char ** pfilename,
|
| info.arch = bfd_get_arch (current_bfd);
|
| info.mach = bfd_get_mach (current_bfd);
|
| if (info.mach == 0)
|
| - info.arch = bfd_arch_rl78;
|
| + info.arch = bfd_arch_msp430;
|
|
|
| disassemble_init_for_target (& info);
|
|
|
| @@ -238,7 +244,7 @@ sim_get_current_source_location (const char ** pfilename,
|
| }
|
|
|
| void
|
| -sim_disasm_one (void)
|
| +msp430_trace_one (int mypc)
|
| {
|
| static int last_sym = -1;
|
| static const char * prev_filename = "";
|
| @@ -248,14 +254,10 @@ sim_disasm_one (void)
|
| unsigned int lineno;
|
| int sym, bestaddr;
|
| int min, max, i;
|
| - int save_trace = trace;
|
| - int mypc = pc;
|
|
|
| - if (! sim_get_current_source_location (& filename, & functionname, & lineno))
|
| + if (! msp430_get_current_source_location (mypc, & filename, & functionname, & lineno))
|
| return;
|
|
|
| - trace = 0;
|
| -
|
| if (filename && functionname && lineno)
|
| {
|
| if (lineno != prev_lineno || strcmp (prev_filename, filename))
|
| @@ -267,10 +269,10 @@ sim_disasm_one (void)
|
| slash = filename;
|
| else
|
| slash ++;
|
| - printf
|
| - ("========================================"
|
| + fprintf
|
| + (stderr, "========================================"
|
| "=====================================\n");
|
| - printf ("\033[37;41m %s:%d: \033[33;40m %s\033[K\033[0m\n",
|
| + fprintf (stderr, "\033[37;41m %s:%d: \033[33;40m %s\033[K\033[0m\n",
|
| slash, lineno, the_line);
|
| }
|
| prev_lineno = lineno;
|
| @@ -301,10 +303,10 @@ sim_disasm_one (void)
|
| if (min != -1 && min != last_sym)
|
| {
|
| bestaddr = bfd_asymbol_value (symtab[min]);
|
| - printf ("\033[43;30m%s", bfd_asymbol_name (symtab[min]));
|
| + fprintf (stderr, "\033[43;30m%s", bfd_asymbol_name (symtab[min]));
|
| if (bestaddr != mypc)
|
| - printf ("+%d", mypc - bestaddr);
|
| - printf (":\t\t\t\033[0m\n");
|
| + fprintf (stderr, "+%d", mypc - bestaddr);
|
| + fprintf (stderr, ":\t\t\t\033[0m\n");
|
| last_sym = min;
|
| #if 0
|
| if (trace == 1)
|
| @@ -313,30 +315,4 @@ sim_disasm_one (void)
|
| trace = 0;
|
| #endif
|
| }
|
| -
|
| -#define TCR0 0xf0180
|
| -
|
| - opbuf[0] = 0;
|
| -#ifdef CYCLE_ACCURATE
|
| - printf ("\033[33m %04u %06x: ", (int)(regs.cycle_count % 10000), mypc);
|
| -#else
|
| - printf ("\033[33m %08llx %06x: ", total_clocks, mypc);
|
| -#endif
|
| -
|
| - max = print_insn_rl78 (mypc, & info);
|
| -
|
| - for (i = 0; i < max; i ++)
|
| - printf ("%02x", mem_get_qi (mypc + i));
|
| -
|
| - do
|
| - {
|
| - printf (" ");
|
| - i ++;
|
| - }
|
| - while (i < 6);
|
| -
|
| - printf ("%-16s ", opbuf);
|
| -
|
| - printf ("\033[0m\n");
|
| - trace = save_trace;
|
| }
|
|
|