mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
b61e2e146a
* cgen-sim.h: Simple header that includes others. * sim-arange.c: New file. * sim-arange.h: New file. * sim-basics.h: Include it. * Make-common.in (SIM_NEW_COMMON_OBJS): Add sim-arange.o. (sim-arange.o): Add rule for. * sim-cpu.h (sim_cpu_msg_prefix): Add prototype. (sim_io_eprintf_cpu): Add prototype. * sim-inline.h (HAVE_INLINE): Define if GNUC. (INLINE2): New macro. (EXTERN_INLINE): New macro. * sim-module.c (sim_post_argv_init): Initialize cpu backlink before calling module init fns. * sim-profile.h (OPTION_PROFILE_*): Move into enum. (profile_init): New function. (profile_options): New option --profile-range. (profile_option_handler): Handle --profile-range. (profile_print_insn): Qualify address range specific section titles. (profile_print_addr_ranges): New function. (profile_info): Print address ranges if specified. (profile_install): Set profile_init init fn. * sim-profile.h (PROFILE_DATA): New member `range'. * sim-trace.c (trace_init): New function. (trace_options): New option --trace-range. (trace_option_handler): Handle --trace-range. (trace_install): Set trace_init init fn. * sim-trace.h (TRACE_DATA): New member `range'. * sim-utils.c (sim_cpu_msg_prefix): New function. (sim_io_eprintf_cpu): New function. * cgen-engine.h (PC_IN_TRACE_RANGE_P): New macro. (PC_IN_PROFILE_RANGE_P): New macro. * cgen-trace.c (trace_insn_init): Set current_insn to NULL. (trace_insn_fini): New arg abuf. All callers updated. Exit early if trace_insn not called. Check ARGBUF_PROFILE_P before printing cycle counts. * cgen-trace.h (trace_insn_fini): Update prototype. (TRACE_RESULT_P): New macro. (TRACE_INSN_INIT,TRACE_INSN_FINI): New arg abuf. All callers updated. (TRACE_INSN): Check ARGBUF_TRACE_P. (TRACE_EXTRACT,TRACE_RESULT): New arg abuf. All callers updated. * cgen-types.h (SIM_INLINE): Delete. (SIM_HAVE_MODEL,SIM_HAVE_ADDR_RANGE): Define. * cgen-utils.c: Don't include cgen-engine.h * genmloop.sh (@cpu@_fill_argbuf): New function. (@cpu@_fill_argbuf_tp): New function. (@cpu@_emit_before,@cpu@_emit_after): New functions. (@cpu@_pbb_begin): Prefix cti_sc,insn_count with '_'. (SET_CTI_VPC,SET_INSN_COUNT): Update. (@cpu@_pbb_before): Check ARGBUF_PROFILE_P before calling doing profiling. Update call to TRACE_INSN_INIT,TRACE_INSN_FINI. (@cpu@_pbb_after): Check ARGBUF_PROFILE_P before calling doing profiling. Update call to TRACE_INSN_FINI.
67 lines
2.2 KiB
C
67 lines
2.2 KiB
C
/* Simulator tracing support for Cpu tools GENerated simulators.
|
|
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
|
|
Contributed by Cygnus Support.
|
|
|
|
This file is part of GDB, the GNU debugger.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|
|
|
#ifndef CGEN_TRACE_H
|
|
#define CGEN_TRACE_H
|
|
|
|
void trace_insn_init (SIM_CPU *, int);
|
|
void trace_insn_fini (SIM_CPU *, const struct argbuf *, int);
|
|
void trace_insn (SIM_CPU *, const struct cgen_insn *,
|
|
const struct argbuf *, PCADDR);
|
|
void trace_extract (SIM_CPU *, PCADDR, char *, ...);
|
|
void trace_result (SIM_CPU *, char *, int, ...);
|
|
void cgen_trace_printf (SIM_CPU *, char *fmt, ...);
|
|
|
|
/* Trace instruction results. */
|
|
#define TRACE_RESULT_P(cpu, abuf) (TRACE_INSN_P (cpu) && ARGBUF_TRACE_P (abuf))
|
|
|
|
#define TRACE_INSN_INIT(cpu, abuf, first_p) \
|
|
do { \
|
|
if (TRACE_INSN_P (cpu)) \
|
|
trace_insn_init ((cpu), (first_p)); \
|
|
} while (0)
|
|
#define TRACE_INSN_FINI(cpu, abuf, last_p) \
|
|
do { \
|
|
if (TRACE_INSN_P (cpu)) \
|
|
trace_insn_fini ((cpu), (abuf), (last_p)); \
|
|
} while (0)
|
|
#define TRACE_PRINTF(cpu, what, args) \
|
|
do { \
|
|
if (TRACE_P ((cpu), (what))) \
|
|
cgen_trace_printf args ; \
|
|
} while (0)
|
|
#define TRACE_INSN(cpu, opcode, abuf, pc) \
|
|
do { \
|
|
if (TRACE_INSN_P (cpu) && ARGBUF_TRACE_P (abuf)) \
|
|
trace_insn ((cpu), (opcode), (abuf), (pc)) ; \
|
|
} while (0)
|
|
#define TRACE_EXTRACT(cpu, abuf, args) \
|
|
do { \
|
|
if (TRACE_EXTRACT_P (cpu)) \
|
|
trace_extract args ; \
|
|
} while (0)
|
|
#define TRACE_RESULT(cpu, abuf, name, type, val) \
|
|
do { \
|
|
if (TRACE_RESULT_P ((cpu), (abuf))) \
|
|
trace_result ((cpu), (name), (type), (val)) ; \
|
|
} while (0)
|
|
|
|
#endif /* CGEN_TRACE_H */
|