diff options
Diffstat (limited to 'sim/aarch64')
-rw-r--r-- | sim/aarch64/ChangeLog | 8 | ||||
-rw-r--r-- | sim/aarch64/interp.c | 8 | ||||
-rw-r--r-- | sim/aarch64/simulator.c | 8 | ||||
-rw-r--r-- | sim/aarch64/simulator.h | 4 |
4 files changed, 19 insertions, 9 deletions
diff --git a/sim/aarch64/ChangeLog b/sim/aarch64/ChangeLog index 78015ef..d32a81b 100644 --- a/sim/aarch64/ChangeLog +++ b/sim/aarch64/ChangeLog @@ -1,3 +1,11 @@ +2016-08-11 Nick Clifton <nickc@redhat.com> + + * interp.c (sim_create_inferior): Allow for being called with a + NULL abfd parameter. If a bfd is provided, initialise the sim + with that start address. + * simulator.c (HALT_NYI): Just print out the numeric value of the + instruction when not tracing. + 2016-07-27 Alan Modra <amodra@gmail.com> * memory.c: Don't include libbfd.h. diff --git a/sim/aarch64/interp.c b/sim/aarch64/interp.c index 8ae78c4..2a3ff26 100644 --- a/sim/aarch64/interp.c +++ b/sim/aarch64/interp.c @@ -135,7 +135,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char * const *argv, char * const *env) { sim_cpu *cpu = STATE_CPU (sd, 0); - long storage; + long storage = 0; bfd_vma addr = 0; if (abfd != NULL) @@ -154,7 +154,8 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, STATE_PROG_ARGV (sd) = dupargv (argv); } - storage = bfd_get_symtab_upper_bound (abfd); + if (abfd != NULL) + storage = bfd_get_symtab_upper_bound (abfd); if (storage > 0) { symtab = (asymbol **) xmalloc (storage); @@ -163,7 +164,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd, qsort (symtab, symcount, sizeof (asymbol *), compare_symbols); } - aarch64_init (cpu, bfd_get_start_address (abfd)); + aarch64_init (cpu, addr); return SIM_RC_OK; } @@ -332,7 +333,6 @@ sim_open (SIM_OPEN_KIND kind, struct bfd * abfd, char * const * argv) { - int i; sim_cpu *cpu; SIM_DESC sd = sim_state_alloc (kind, callback); diff --git a/sim/aarch64/simulator.c b/sim/aarch64/simulator.c index 45844e2..150bf34 100644 --- a/sim/aarch64/simulator.c +++ b/sim/aarch64/simulator.c @@ -64,10 +64,8 @@ " exe addr %" PRIx64, \ __LINE__, aarch64_get_PC (cpu)); \ if (! TRACE_ANY_P (cpu)) \ - { \ - sim_io_eprintf (CPU_STATE (cpu), "SIM Error: Unimplemented instruction: "); \ - trace_disasm (CPU_STATE (cpu), cpu, aarch64_get_PC (cpu)); \ - } \ + sim_io_eprintf (CPU_STATE (cpu), "SIM Error: Unimplemented instruction: %#08x\n", \ + aarch64_get_instr (cpu)); \ sim_engine_halt (CPU_STATE (cpu), cpu, NULL, aarch64_get_PC (cpu),\ sim_stopped, SIM_SIGABRT); \ } \ @@ -14074,7 +14072,7 @@ aarch64_decode_and_execute (sim_cpu *cpu, uint64_t pc) } } -static bfd_boolean +bfd_boolean aarch64_step (sim_cpu *cpu) { uint64_t pc = aarch64_get_PC (cpu); diff --git a/sim/aarch64/simulator.h b/sim/aarch64/simulator.h index 08bed3d..a17bd21 100644 --- a/sim/aarch64/simulator.h +++ b/sim/aarch64/simulator.h @@ -47,6 +47,10 @@ extern void aarch64_init (sim_cpu *, uint64_t); extern void aarch64_run (SIM_DESC); +/* Call this to execute one instruction at the current PC. */ + +extern bfd_boolean aarch64_step (sim_cpu *); + extern const char * aarch64_get_func (uint64_t); extern uint64_t aarch64_get_sym_value (const char *); extern void aarch64_init_LIT_table (void); |