[PATCH 13/24] RISC-V sim: Add gettimeofday.

Jim Wilson jimw@sifive.com
Sat Apr 17 17:58:20 GMT 2021


From: Kuan-Lin Chen <rufus@andestech.com>

Handle TARGET_SYS_gettimeofday.

	sim/riscv/
	* sim-main.c: Include sys/time.h.
	(execute_i): In MATCH_ECALL case, handle TARGET_sys_gettimeofday.
---
 sim/riscv/sim-main.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/sim/riscv/sim-main.c b/sim/riscv/sim-main.c
index 7262ac1..f330ef9 100644
--- a/sim/riscv/sim-main.c
+++ b/sim/riscv/sim-main.c
@@ -26,6 +26,7 @@
 #include <inttypes.h>
 #include <time.h>
 #include <unistd.h>
+#include <sys/time.h>
 
 #include "sim-main.h"
 #include "sim-fpu.h"
@@ -1752,6 +1753,32 @@ execute_i (SIM_CPU *cpu, unsigned_word iw, const struct riscv_opcode *op)
 		  cpu->endbrk = cpu->a0;
 		break;
 	      }
+	    case TARGET_SYS_gettimeofday:
+	      {
+		int rv;
+		struct timeval tv;
+
+		rv = gettimeofday (&tv, 0);
+		if (RISCV_XLEN (cpu) == 32)
+		  {
+		    sim_core_write_unaligned_4 (cpu, cpu->pc, write_map,
+						cpu->a0, tv.tv_sec);
+		    sim_core_write_unaligned_4 (cpu, cpu->pc, write_map,
+						cpu->a0 + 4,
+						tv.tv_usec);
+		  }
+		else
+		  {
+		    sim_core_write_unaligned_8 (cpu, cpu->pc, write_map,
+						cpu->a0, tv.tv_sec);
+		    sim_core_write_unaligned_8 (cpu, cpu->pc, write_map,
+						cpu->a0 + 8,
+						tv.tv_usec);
+		  }
+
+		cpu->a0 = rv;
+		break;
+	      }
 	    default:
 	      cpu->a0 = sim_syscall (cpu, cpu->a7, cpu->a0,
 				     cpu->a1, cpu->a2, cpu->a3);
-- 
2.7.4



More information about the Gdb-patches mailing list