* sim-trace.c (trace_option_handler): Set state trace file
for --trace-file in addition to cpu's values. (trace_vprintf): If cpu == NULL, try state's trace file.
This commit is contained in:
parent
46ac172085
commit
091521c48b
2 changed files with 51 additions and 24 deletions
|
@ -9,10 +9,9 @@ Mon Nov 24 12:09:59 1997 Doug Evans <devans@seba.cygnus.com>
|
|||
|
||||
* sim-model.c (model_options): Use '\0' for `shortopt'.
|
||||
|
||||
* Make-common.in (all): Add .gdbinit.
|
||||
* gdbinit.in: Add dump command.
|
||||
|
||||
* sim-model.c (model_options): Use '\0' for `shortopt'.
|
||||
* sim-trace.c (trace_option_handler): Set state trace file
|
||||
for --trace-file in addition to cpu's values.
|
||||
(trace_vprintf): If cpu == NULL, try state's trace file.
|
||||
|
||||
Sun Nov 23 10:57:00 1997 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ enum {
|
|||
OPTION_TRACE_FPU,
|
||||
OPTION_TRACE_BRANCH,
|
||||
OPTION_TRACE_SEMANTICS,
|
||||
OPTION_TRACE_DEBUG,
|
||||
OPTION_TRACE_FILE
|
||||
};
|
||||
|
||||
|
@ -95,11 +96,9 @@ static const OPTION trace_options[] =
|
|||
{ {"trace-alu", optional_argument, NULL, OPTION_TRACE_ALU},
|
||||
'\0', "on|off", "Perform ALU tracing",
|
||||
trace_option_handler },
|
||||
#if (WITH_CORE)
|
||||
{ {"trace-core", optional_argument, NULL, OPTION_TRACE_CORE},
|
||||
'\0', "on|off", "Perform CORE tracing",
|
||||
trace_option_handler },
|
||||
#endif
|
||||
{ {"trace-events", optional_argument, NULL, OPTION_TRACE_EVENTS},
|
||||
'\0', "on|off", "Perform EVENTS tracing",
|
||||
trace_option_handler },
|
||||
|
@ -112,6 +111,9 @@ static const OPTION trace_options[] =
|
|||
{ {"trace-semantics", optional_argument, NULL, OPTION_TRACE_SEMANTICS},
|
||||
'\0', "on|off", "Perform ALU, FPU, MEMORY, and BRANCH tracing",
|
||||
trace_option_handler },
|
||||
{ {"trace-debug", optional_argument, NULL, OPTION_TRACE_DEBUG},
|
||||
'\0', "on|off", "Add information useful for debugging the simulator to the tracing output",
|
||||
trace_option_handler },
|
||||
{ {"trace-file", required_argument, NULL, OPTION_TRACE_FILE},
|
||||
'\0', "FILE NAME", "Specify tracing output file",
|
||||
trace_option_handler },
|
||||
|
@ -133,6 +135,7 @@ set_trace_options (sd, name, first_trace, last_trace, arg)
|
|||
int trace_nr;
|
||||
int cpu_nr;
|
||||
int trace_val = 1;
|
||||
|
||||
if (arg != NULL)
|
||||
{
|
||||
if (strcmp (arg, "yes") == 0
|
||||
|
@ -149,26 +152,29 @@ set_trace_options (sd, name, first_trace, last_trace, arg)
|
|||
return SIM_RC_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
trace_nr = first_trace;
|
||||
do
|
||||
{
|
||||
/* Set non-cpu specific values. */
|
||||
switch (trace_nr)
|
||||
{
|
||||
#if (WITH_CORE)
|
||||
case TRACE_CORE_IDX:
|
||||
STATE_CORE(sd)->trace = trace_val;
|
||||
break;
|
||||
#endif
|
||||
case TRACE_EVENTS_IDX:
|
||||
STATE_EVENTS(sd)->trace = trace_val;
|
||||
STATE_EVENTS (sd)->trace = trace_val;
|
||||
break;
|
||||
case TRACE_DEBUG_IDX:
|
||||
STATE_TRACE_FLAGS (sd)[trace_nr] = trace_val;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Set cpu values. */
|
||||
for (cpu_nr = 0; cpu_nr < MAX_NR_PROCESSORS; cpu_nr++)
|
||||
{
|
||||
CPU_TRACE_FLAGS (STATE_CPU (sd, cpu_nr))[trace_nr] = trace_val;
|
||||
}
|
||||
}
|
||||
while (++trace_nr < last_trace);
|
||||
|
||||
return SIM_RC_OK;
|
||||
}
|
||||
|
||||
|
@ -288,6 +294,13 @@ trace_option_handler (sd, opt, arg, is_command)
|
|||
sim_io_eprintf (sd, "Alu, fpu, memory, and/or branch tracing not compiled in, `--trace-semantics' ignored\n");
|
||||
break;
|
||||
|
||||
case OPTION_TRACE_DEBUG :
|
||||
if (WITH_TRACE_DEBUG_P)
|
||||
return set_trace_options (sd, "-debug", TRACE_DEBUG_IDX, -1, arg);
|
||||
else
|
||||
sim_io_eprintf (sd, "Tracing debug support not compiled in, `--trace-debug' ignored\n");
|
||||
break;
|
||||
|
||||
case OPTION_TRACE_FILE :
|
||||
if (! WITH_TRACE)
|
||||
sim_io_eprintf (sd, "Tracing not compiled in, `--trace-file' ignored\n");
|
||||
|
@ -302,6 +315,7 @@ trace_option_handler (sd, opt, arg, is_command)
|
|||
}
|
||||
for (n = 0; n < MAX_NR_PROCESSORS; ++n)
|
||||
TRACE_FILE (CPU_TRACE_DATA (STATE_CPU (sd, n))) = f;
|
||||
TRACE_FILE (STATE_TRACE_DATA (sd)) = f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -319,6 +333,7 @@ trace_install (SIM_DESC sd)
|
|||
SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
|
||||
|
||||
sim_add_option_table (sd, trace_options);
|
||||
memset (STATE_TRACE_DATA (sd), 0, sizeof (* STATE_TRACE_DATA (sd)));
|
||||
for (i = 0; i < MAX_NR_PROCESSORS; ++i)
|
||||
memset (CPU_TRACE_DATA (STATE_CPU (sd, i)), 0,
|
||||
sizeof (* CPU_TRACE_DATA (STATE_CPU (sd, i))));
|
||||
|
@ -330,20 +345,23 @@ static void
|
|||
trace_uninstall (SIM_DESC sd)
|
||||
{
|
||||
int i,j;
|
||||
FILE *sfile = TRACE_FILE (STATE_TRACE_DATA (sd));
|
||||
|
||||
if (sfile != NULL)
|
||||
fclose (sfile);
|
||||
|
||||
for (i = 0; i < MAX_NR_PROCESSORS; ++i)
|
||||
{
|
||||
TRACE_DATA *data = CPU_TRACE_DATA (STATE_CPU (sd, i));
|
||||
if (TRACE_FILE (data) != NULL)
|
||||
FILE *cfile = TRACE_FILE (CPU_TRACE_DATA (STATE_CPU (sd, i)));
|
||||
if (cfile != NULL && cfile != sfile)
|
||||
{
|
||||
/* If output from different cpus is going to the same file,
|
||||
avoid closing the file twice. */
|
||||
for (j = 0; j < i; ++j)
|
||||
if (TRACE_FILE (CPU_TRACE_DATA (STATE_CPU (sd, j)))
|
||||
== TRACE_FILE (data))
|
||||
if (TRACE_FILE (CPU_TRACE_DATA (STATE_CPU (sd, j))) == cfile)
|
||||
break;
|
||||
if (i == j)
|
||||
fclose (TRACE_FILE (data));
|
||||
fclose (cfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -434,16 +452,26 @@ trace_one_insn (SIM_DESC sd, sim_cpu *cpu, address_word pc,
|
|||
void
|
||||
trace_vprintf (SIM_DESC sd, sim_cpu *cpu, const char *fmt, va_list ap)
|
||||
{
|
||||
if (cpu != NULL && TRACE_FILE (CPU_TRACE_DATA (cpu)) != NULL)
|
||||
vfprintf (TRACE_FILE (CPU_TRACE_DATA (cpu)), fmt, ap);
|
||||
if (cpu != NULL)
|
||||
{
|
||||
if (TRACE_FILE (CPU_TRACE_DATA (cpu)) != NULL)
|
||||
vfprintf (TRACE_FILE (CPU_TRACE_DATA (cpu)), fmt, ap);
|
||||
else
|
||||
sim_io_evprintf (sd, fmt, ap);
|
||||
}
|
||||
else
|
||||
sim_io_evprintf (sd, fmt, ap);
|
||||
{
|
||||
if (TRACE_FILE (STATE_TRACE_DATA (sd)) != NULL)
|
||||
vfprintf (TRACE_FILE (STATE_TRACE_DATA (sd)), fmt, ap);
|
||||
else
|
||||
sim_io_evprintf (sd, fmt, ap);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
trace_printf VPARAMS ((SIM_DESC sd, sim_cpu *cpu, const char *fmt, ...))
|
||||
{
|
||||
#ifndef __STDC__
|
||||
#if !defined __STDC__ && !defined ALMOST_STDC
|
||||
SIM_DESC sd;
|
||||
sim_cpu *cpu;
|
||||
const char *fmt;
|
||||
|
@ -451,7 +479,7 @@ trace_printf VPARAMS ((SIM_DESC sd, sim_cpu *cpu, const char *fmt, ...))
|
|||
va_list ap;
|
||||
|
||||
VA_START (ap, fmt);
|
||||
#ifndef __STDC__
|
||||
#if !defined __STDC__ && !defined ALMOST_STDC
|
||||
sd = va_arg (ap, SIM_DESC);
|
||||
cpu = va_arg (ap, sim_cpu *);
|
||||
fmt = va_arg (ap, const char *);
|
||||
|
@ -465,14 +493,14 @@ trace_printf VPARAMS ((SIM_DESC sd, sim_cpu *cpu, const char *fmt, ...))
|
|||
void
|
||||
debug_printf VPARAMS ((sim_cpu *cpu, const char *fmt, ...))
|
||||
{
|
||||
#ifndef __STDC__
|
||||
#if !defined __STDC__ && !defined ALMOST_STDC
|
||||
sim_cpu *cpu;
|
||||
const char *fmt;
|
||||
#endif
|
||||
va_list ap;
|
||||
|
||||
VA_START (ap, fmt);
|
||||
#ifndef __STDC__
|
||||
#if !defined __STDC__ && !defined ALMOST_STDC
|
||||
cpu = va_arg (ap, sim_cpu *);
|
||||
fmt = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue