📄 sim-calls.c
字号:
/* OBSOLETE /* This file is part of the program psim. *//* OBSOLETE *//* OBSOLETE Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au> *//* OBSOLETE Copyright (C) 1997, Free Software Foundation *//* OBSOLETE *//* OBSOLETE This program is free software; you can redistribute it and/or modify *//* OBSOLETE it under the terms of the GNU General Public License as published by *//* OBSOLETE the Free Software Foundation; either version 2 of the License, or *//* OBSOLETE (at your option) any later version. *//* OBSOLETE *//* OBSOLETE This program is distributed in the hope that it will be useful, *//* OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of *//* OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *//* OBSOLETE GNU General Public License for more details. *//* OBSOLETE *//* OBSOLETE You should have received a copy of the GNU General Public License *//* OBSOLETE along with this program; if not, write to the Free Software *//* OBSOLETE Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//* OBSOLETE *//* OBSOLETE */ *//* OBSOLETE *//* OBSOLETE *//* OBSOLETE #include <stdarg.h> *//* OBSOLETE #include <ctype.h> *//* OBSOLETE *//* OBSOLETE #include "sim-main.h" *//* OBSOLETE #include "sim-options.h" *//* OBSOLETE *//* OBSOLETE #include "bfd.h" *//* OBSOLETE #include "sim-utils.h" *//* OBSOLETE *//* OBSOLETE #ifdef HAVE_STDLIB_H *//* OBSOLETE #include <stdlib.h> *//* OBSOLETE #endif *//* OBSOLETE *//* OBSOLETE static unsigned long extmem_size = 1024*1024*8; /* 8 meg is the maximum listed in the arch. manual */ *//* OBSOLETE *//* OBSOLETE static const char * get_insn_name (sim_cpu *, int); *//* OBSOLETE *//* OBSOLETE #define SIM_ADDR unsigned *//* OBSOLETE *//* OBSOLETE *//* OBSOLETE #define OPTION_TRACE_CALL 200 *//* OBSOLETE #define OPTION_TRACE_TRAPDUMP 201 *//* OBSOLETE #define OPTION_EXTMEM_SIZE 202 *//* OBSOLETE *//* OBSOLETE static SIM_RC *//* OBSOLETE d30v_option_handler (SIM_DESC sd, *//* OBSOLETE sim_cpu *cpu, *//* OBSOLETE int opt, *//* OBSOLETE char *arg, *//* OBSOLETE int command_p) *//* OBSOLETE { *//* OBSOLETE char *suffix; *//* OBSOLETE *//* OBSOLETE switch (opt) *//* OBSOLETE { *//* OBSOLETE default: *//* OBSOLETE break; *//* OBSOLETE *//* OBSOLETE case OPTION_TRACE_CALL: *//* OBSOLETE if (arg == NULL || strcmp (arg, "yes") == 0 || strcmp (arg, "on") == 0) *//* OBSOLETE TRACE_CALL_P = 1; *//* OBSOLETE else if (strcmp (arg, "no") == 0 || strcmp (arg, "off") == 0) *//* OBSOLETE TRACE_CALL_P = 0; *//* OBSOLETE else *//* OBSOLETE { *//* OBSOLETE sim_io_eprintf (sd, "Unreconized --trace-call option `%s'\n", arg); *//* OBSOLETE return SIM_RC_FAIL; *//* OBSOLETE } *//* OBSOLETE return SIM_RC_OK; *//* OBSOLETE *//* OBSOLETE case OPTION_TRACE_TRAPDUMP: *//* OBSOLETE if (arg == NULL || strcmp (arg, "yes") == 0 || strcmp (arg, "on") == 0) *//* OBSOLETE TRACE_TRAP_P = 1; *//* OBSOLETE else if (strcmp (arg, "no") == 0 || strcmp (arg, "off") == 0) *//* OBSOLETE TRACE_TRAP_P = 0; *//* OBSOLETE else *//* OBSOLETE { *//* OBSOLETE sim_io_eprintf (sd, "Unreconized --trace-call option `%s'\n", arg); *//* OBSOLETE return SIM_RC_FAIL; *//* OBSOLETE } *//* OBSOLETE return SIM_RC_OK; *//* OBSOLETE *//* OBSOLETE case OPTION_EXTMEM_SIZE: *//* OBSOLETE if (arg == NULL || !isdigit (*arg)) *//* OBSOLETE { *//* OBSOLETE sim_io_eprintf (sd, "Invalid memory size `%s'", arg); *//* OBSOLETE return SIM_RC_FAIL; *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE suffix = arg; *//* OBSOLETE extmem_size = strtol (arg, &suffix, 0); *//* OBSOLETE if (*suffix == 'm' || *suffix == 'M') *//* OBSOLETE extmem_size <<= 20; *//* OBSOLETE else if (*suffix == 'k' || *suffix == 'K') *//* OBSOLETE extmem_size <<= 10; *//* OBSOLETE sim_do_commandf (sd, "memory delete 0x80000000"); *//* OBSOLETE sim_do_commandf (sd, "memory region 0x80000000,0x%lx", extmem_size); *//* OBSOLETE *//* OBSOLETE return SIM_RC_OK; *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE sim_io_eprintf (sd, "Unknown option (%d)\n", opt); *//* OBSOLETE return SIM_RC_FAIL; *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE static const OPTION d30v_options[] = *//* OBSOLETE { *//* OBSOLETE { {"trace-call", optional_argument, NULL, OPTION_TRACE_CALL}, *//* OBSOLETE '\0', "on|off", "Enable tracing of calls and returns, checking saved registers", *//* OBSOLETE d30v_option_handler }, *//* OBSOLETE { {"trace-trapdump", optional_argument, NULL, OPTION_TRACE_TRAPDUMP}, *//* OBSOLETE '\0', "on|off", *//* OBSOLETE #if TRAPDUMP *//* OBSOLETE "Traps 0..30 dump out all of the registers (defaults on)", *//* OBSOLETE #else *//* OBSOLETE "Traps 0..30 dump out all of the registers", *//* OBSOLETE #endif *//* OBSOLETE d30v_option_handler }, *//* OBSOLETE { {"extmem-size", required_argument, NULL, OPTION_EXTMEM_SIZE}, *//* OBSOLETE '\0', "size", "Change size of external memory, default 8 meg", *//* OBSOLETE d30v_option_handler }, *//* OBSOLETE { {NULL, no_argument, NULL, 0}, '\0', NULL, NULL, NULL } *//* OBSOLETE }; *//* OBSOLETE *//* OBSOLETE /* Return name of an insn, used by insn profiling. */ *//* OBSOLETE *//* OBSOLETE static const char * *//* OBSOLETE get_insn_name (sim_cpu *cpu, int i) *//* OBSOLETE { *//* OBSOLETE return itable[i].name; *//* OBSOLETE } *//* OBSOLETE *//* OBSOLETE /* Structures used by the simulator, for gdb just have static structures */ *//* OBSOLETE *//* OBSOLETE SIM_DESC *//* OBSOLETE sim_open (SIM_OPEN_KIND kind, *//* OBSOLETE host_callback *callback, *//* OBSOLETE struct _bfd *abfd, *//* OBSOLETE char **argv) *//* OBSOLETE { *//* OBSOLETE SIM_DESC sd = sim_state_alloc (kind, callback); *//* OBSOLETE *//* OBSOLETE /* FIXME: watchpoints code shouldn't need this */ *//* OBSOLETE STATE_WATCHPOINTS (sd)->pc = &(PC); *//* OBSOLETE STATE_WATCHPOINTS (sd)->sizeof_pc = sizeof (PC); *//* OBSOLETE STATE_WATCHPOINTS (sd)->interrupt_handler = d30v_interrupt_event; *//* OBSOLETE *//* OBSOLETE /* Initialize the mechanism for doing insn profiling. */ *//* OBSOLETE CPU_INSN_NAME (STATE_CPU (sd, 0)) = get_insn_name; *//* OBSOLETE CPU_MAX_INSNS (STATE_CPU (sd, 0)) = nr_itable_entries; *//* OBSOLETE *//* OBSOLETE #ifdef TRAPDUMP *//* OBSOLETE TRACE_TRAP_P = TRAPDUMP; *//* OBSOLETE #endif *//* OBSOLETE *//* OBSOLETE if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK) *//* OBSOLETE return 0; *//* OBSOLETE sim_add_option_table (sd, NULL, d30v_options); *//* OBSOLETE *//* OBSOLETE /* Memory and EEPROM */ *//* OBSOLETE /* internal instruction RAM - fixed */ *//* OBSOLETE sim_do_commandf (sd, "memory region 0,0x10000"); *//* OBSOLETE /* internal data RAM - fixed */ *//* OBSOLETE sim_do_commandf (sd, "memory region 0x20000000,0x8000"); *//* OBSOLETE /* control register dummy area */ *//* OBSOLETE sim_do_commandf (sd, "memory region 0x40000000,0x10000"); *//* OBSOLETE /* external RAM */ *//* OBSOLETE sim_do_commandf (sd, "memory region 0x80000000,0x%lx", extmem_size); *//* OBSOLETE /* EIT RAM */ *//* OBSOLETE sim_do_commandf (sd, "memory region 0xfffff000,0x1000"); *//* OBSOLETE *//* OBSOLETE /* getopt will print the error message so we just have to exit if this fails. *//* OBSOLETE FIXME: Hmmm... in the case of gdb we need getopt to call *//* OBSOLETE print_filtered. */ *//* OBSOLETE if (sim_parse_args (sd, argv) != SIM_RC_OK) *//* OBSOLETE { *//* OBSOLETE /* Uninstall the modules to avoid memory leaks, *//* OBSOLETE file descriptor leaks, etc. */ *//* OBSOLETE sim_module_uninstall (sd); *//* OBSOLETE return 0; *//* OBSOLETE } */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -