* sim-base.h (struct sim_state_base): Add prog_syms and
define macro STATE_PROG_SYMS. * sim-trace.c (trace_one_insn): Add variables abfd, symsize, symbol_count, and asymbols. Call bfd_get_symtab_upper_bound and bfd_canonicalize_symtab, to get symbol table on first use and preserve it via STATE_PROG_SYMS for future calls to bfd_find_nearest_line.
This commit is contained in:
parent
2b9cac47f5
commit
93f75411f6
2 changed files with 84 additions and 8 deletions
|
@ -1,3 +1,60 @@
|
|||
1998-03-13 Fred Fish <fnf@cygnus.com>
|
||||
|
||||
* sim-base.h (struct sim_state_base): Add prog_syms and
|
||||
define macro STATE_PROG_SYMS.
|
||||
* sim-trace.c (trace_one_insn): Add variables abfd, symsize,
|
||||
symbol_count, and asymbols. Call bfd_get_symtab_upper_bound
|
||||
and bfd_canonicalize_symtab, to get symbol table on first use
|
||||
and preserve it via STATE_PROG_SYMS for future calls to
|
||||
bfd_find_nearest_line.
|
||||
|
||||
Wed Mar 11 14:02:47 1998 Andrew Cagney <cagney@b1.cygnus.com>
|
||||
|
||||
* sim-core.h, sim-core.c (sim_core_map_to_str): Delete.
|
||||
|
||||
* sim-core.c (sim_core_attach): Handle a generic number of maps -
|
||||
up to nr_maps, not just access_* maps.
|
||||
|
||||
* sim-profile.h (struct PROFILE_DATA): Track nr_maps different
|
||||
maps.
|
||||
|
||||
* sim-profile.c (profile_print_core): Make map unsigned. Iterate
|
||||
over nr_maps not sim_core_nr_maps.
|
||||
|
||||
* sim-events.h, sim-events.c (sim_events_watch_core): Change
|
||||
core_map argument to unsigned.
|
||||
(struct _sim_core): Ditto for struct member core_map.
|
||||
|
||||
* sim-core.h (nr_sim_core_maps, sim_core_*_map): Delete
|
||||
|
||||
* sim-basics.h (access_io, access_*_io): Define.
|
||||
(map_read, map_write, map_exec, map_io): Define.
|
||||
|
||||
* sim-core.c, sim-core.h (sim_core_attach): Replace argument
|
||||
attach with more generic mapmask.
|
||||
(sim_core_{read,write}_*): Change map argument to unsigned.
|
||||
|
||||
* sim-core.c (sim_core_uninstall, sim_core_attach,
|
||||
sim_core_detach): Iterate over nr_maps instead of
|
||||
sim_core_nr_maps.
|
||||
|
||||
* sim-break.c (insert_breakpoint): Write breakpoints to exec_map
|
||||
instead of the write_map.
|
||||
(remove_breakpoint): Ditto.
|
||||
|
||||
* genmloop.sh (engine_resume_full): Replace sim_core_*_map
|
||||
with read_map, write_map, exec_map resp.
|
||||
|
||||
* cgen-mem.h (DECLARE_GETMEM, DECLARE_SETMEM, DECLARE_GETIMEM):
|
||||
Ditto.
|
||||
|
||||
* cgen-utils.c (sim_disassemble_insn): Ditto.
|
||||
|
||||
* sim-hrw.c (sim_write, sim_write): Ditto.
|
||||
|
||||
* sim-utils.h, sim-utils.c (access_to_str, map_to_str,
|
||||
transfer_to_str): New functions.
|
||||
|
||||
Mon Mar 9 12:50:59 1998 Doug Evans <devans@seba.cygnus.com>
|
||||
|
||||
* sim-base.h (sim_state_base): New member environment.
|
||||
|
|
|
@ -192,11 +192,8 @@ set_trace_option (sd, name, idx, arg)
|
|||
|
||||
|
||||
static SIM_RC
|
||||
trace_option_handler (sd, opt, arg, is_command)
|
||||
SIM_DESC sd;
|
||||
int opt;
|
||||
char *arg;
|
||||
int is_command;
|
||||
trace_option_handler (SIM_DESC sd, sim_cpu *cpu, int opt,
|
||||
char *arg, int is_command)
|
||||
{
|
||||
int n;
|
||||
|
||||
|
@ -344,7 +341,7 @@ trace_install (SIM_DESC sd)
|
|||
|
||||
SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
|
||||
|
||||
sim_add_option_table (sd, trace_options);
|
||||
sim_add_option_table (sd, NULL, 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,
|
||||
|
@ -592,10 +589,32 @@ trace_prefix (SIM_DESC sd,
|
|||
const char *pc_filename = (const char *)0;
|
||||
const char *pc_function = (const char *)0;
|
||||
unsigned int pc_linenum = 0;
|
||||
bfd *abfd;
|
||||
asymbol **asymbols;
|
||||
|
||||
if (bfd_find_nearest_line (STATE_PROG_BFD (CPU_STATE (cpu)),
|
||||
abfd = STATE_PROG_BFD (CPU_STATE (cpu));
|
||||
asymbols = STATE_PROG_SYMS (CPU_STATE (cpu));
|
||||
if (asymbols == NULL)
|
||||
{
|
||||
long symsize;
|
||||
long symbol_count;
|
||||
|
||||
symsize = bfd_get_symtab_upper_bound (abfd);
|
||||
if (symsize < 0)
|
||||
{
|
||||
sim_engine_abort (sd, cpu, 0, "could not read symbols\n");
|
||||
}
|
||||
asymbols = (asymbol **) xmalloc (symsize);
|
||||
symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
|
||||
if (symbol_count < 0)
|
||||
{
|
||||
sim_engine_abort (sd, cpu, 0, "could not canonicalize symbols\n");
|
||||
}
|
||||
STATE_PROG_SYMS (CPU_STATE (cpu)) = asymbols;
|
||||
}
|
||||
if (bfd_find_nearest_line (abfd,
|
||||
STATE_TEXT_SECTION (CPU_STATE (cpu)),
|
||||
(struct symbol_cache_entry **) 0,
|
||||
asymbols,
|
||||
pc - STATE_TEXT_START (CPU_STATE (cpu)),
|
||||
&pc_filename, &pc_function, &pc_linenum))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue