From patchwork Thu Aug 11 14:04:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Clifton X-Patchwork-Id: 14490 Received: (qmail 15001 invoked by alias); 11 Aug 2016 14:04:18 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 14111 invoked by uid 89); 11 Aug 2016 14:04:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=1357, 08x, 6410, SIM X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 11 Aug 2016 14:04:16 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5F47661E5F for ; Thu, 11 Aug 2016 14:04:15 +0000 (UTC) Received: from littlehelper.redhat.com (vpn1-7-226.ams2.redhat.com [10.36.7.226]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u7BE4DXs020137 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Thu, 11 Aug 2016 10:04:14 -0400 From: Nick Clifton To: gdb-patches@sourceware.org Subject: Commit: Export AArch64 sum's single step function Date: Thu, 11 Aug 2016 15:04:13 +0100 Message-ID: <87oa4z2yhu.fsf@redhat.com> MIME-Version: 1.0 Hi Guys, I am checking in the patch below to export the AArch64 sim's single step function, so that it can be used when a tool needs to just execute one instruction at a time. The patch also fixes a minor bug in sim_create_inferior which would seg-fault if called without an initialised bfd object. Cheers Nick sim/ChangeLog 2016-08-11 Nick Clifton * 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. (aarch64_step): Change from static to global. * simulator.h: Add a prototype for aarch64_step(). 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);