This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] sim: sim-core: pass down cpu to hw accesses when available


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=dea10706e9159ba6e94eab4c25010f3006d033a0

commit dea10706e9159ba6e94eab4c25010f3006d033a0
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Sat Dec 26 14:16:51 2015 -0500

    sim: sim-core: pass down cpu to hw accesses when available
    
    The bfin port has been using the device callback largely so it could be
    passed the cpu when available.  Add this logic to the common core code
    so all ports get access to the active cpu.
    
    The semantics of these buffer functions are changed slightly in that
    errors halt the engine synchronously rather than returning the length
    to the caller.  We'll probably adjust this in a follow up commit.
    
    The bfin code isn't updated just yet as it has a bit more logic in the
    device layer that needs to be unwound at which point we can delete it
    entirely.

Diff:
---
 sim/common/ChangeLog  |  7 +++++++
 sim/common/sim-core.c | 44 ++++++++++++++++++++++++++++++++++----------
 2 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index 3e6e3d9..05cdda8 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,10 @@
+2015-12-26  Mike Frysinger  <vapier@gentoo.org>
+
+	* sim-core.c (sim_core_read_buffer): Move cia decl to top of func.
+	Call sim_cpu_hw_io_read_buffer if cpu is valid.
+	(sim_core_write_buffer): Move cia decl to top of func.  Call
+	sim_cpu_hw_io_write_buffer if cpu is valid.
+
 2015-12-25  Mike Frysinger  <vapier@gentoo.org>
 
 	* hw-properties.c (hw_find_ihandle_runtime_property): Delete
diff --git a/sim/common/sim-core.c b/sim/common/sim-core.c
index 26fabd5..68212e9 100644
--- a/sim/common/sim-core.c
+++ b/sim/common/sim-core.c
@@ -511,11 +511,23 @@ sim_core_read_buffer (SIM_DESC sd,
 	int nr_bytes = len - count;
 	if (raddr + nr_bytes - 1> mapping->bound)
 	  nr_bytes = mapping->bound - raddr + 1;
-	if (sim_hw_io_read_buffer (sd, mapping->device,
-				   (unsigned_1*)buffer + count,
-				   mapping->space,
-				   raddr,
-				   nr_bytes) != nr_bytes)
+	/* If the access was initiated by a cpu, pass it down so errors can
+	   be propagated properly.  For other sources (e.g. GDB or DMA), we
+	   can only signal errors via the return value.  */
+	if (cpu)
+	  {
+	    sim_cia cia = cpu ? CPU_PC_GET (cpu) : NULL_CIA;
+	    sim_cpu_hw_io_read_buffer (cpu, cia, mapping->device,
+				       (unsigned_1*)buffer + count,
+				       mapping->space,
+				       raddr,
+				       nr_bytes);
+	  }
+	else if (sim_hw_io_read_buffer (sd, mapping->device,
+					(unsigned_1*)buffer + count,
+					mapping->space,
+					raddr,
+					nr_bytes) != nr_bytes)
 	  break;
 	count += nr_bytes;
 	continue;
@@ -577,11 +589,23 @@ sim_core_write_buffer (SIM_DESC sd,
 	  int nr_bytes = len - count;
 	  if (raddr + nr_bytes - 1 > mapping->bound)
 	    nr_bytes = mapping->bound - raddr + 1;
-	  if (sim_hw_io_write_buffer (sd, mapping->device,
-				      (unsigned_1*)buffer + count,
-				      mapping->space,
-				      raddr,
-				      nr_bytes) != nr_bytes)
+	  /* If the access was initiated by a cpu, pass it down so errors can
+	     be propagated properly.  For other sources (e.g. GDB or DMA), we
+	     can only signal errors via the return value.  */
+	  if (cpu)
+	    {
+	      sim_cia cia = cpu ? CPU_PC_GET (cpu) : NULL_CIA;
+	      sim_cpu_hw_io_write_buffer (cpu, cia, mapping->device,
+					  (unsigned_1*)buffer + count,
+					  mapping->space,
+					  raddr,
+					  nr_bytes);
+	    }
+	  else if (sim_hw_io_write_buffer (sd, mapping->device,
+					  (unsigned_1*)buffer + count,
+					  mapping->space,
+					  raddr,
+					  nr_bytes) != nr_bytes)
 	    break;
 	  count += nr_bytes;
 	  continue;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]