Commit Diff


commit - 0ec92ecb47a3a0093deb0f285e0d05d011cf06d9
commit + ff146ca7952073cfa50cef3136f5ad8bf6249dfb
blob - a705236c9bc04ebc05144792b2c9cc7cded54f0a
blob + 44537fe39bb4e8ea22f90917381b9327ef99beb9
--- cpu.c
+++ cpu.c
@@ -254,6 +254,7 @@ void cpu_exec (u32 instr)
 			case 0b0100000:
 				name = "sraiw";
 				c = (i32)a >> shamt;
+				break;
 			default:
 				goto ud;
 			}
blob - d9d65bf68d10b5d9c1590f6519a0c84c3eceaed5
blob + 23d31d68cbaa4919d7ea80f36ba6af592227e811
--- ecall.c
+++ ecall.c
@@ -4,6 +4,7 @@
 #include <sys/stat.h>
 #include <sys/msg.h>
 #include <sys/sem.h>
+#include <sys/uio.h>
 #include <signal.h>
 #include <unistd.h>
 #include <string.h>
@@ -292,10 +293,10 @@ void ecall (void)
 		ret = map (write ((int)a0, ptr (const void, a1), (size_t)a2));
 		break;
 	case SYS_readv:
-		ret = enosys ("readv");
+		ret = map (readv ((int)a0, ptr (const struct iovec, a1), (int)a2));
 		break;
 	case SYS_writev:
-		ret = enosys ("writev");
+		ret = map (writev ((int)a0, ptr (const struct iovec, a1), (int)a2));
 		break;
 	case SYS_pread:
 		ret = map (pread ((int)a0, ptr (void, a1), (size_t)a2, (off_t)a3));
blob - 23cc40c4b208dbd67a50dac13bd9cf0784df78eb
blob + a0d8b14d8d05941c2315f86aa3a6da4ba0551ba4
--- rvemu.c
+++ rvemu.c
@@ -33,7 +33,7 @@ static void load_segment (int fd, Elf64_Phdr phdr)
 		-1,
 		0
 	);
-	fprintf (stderr, "mmap (%p, %#zx) = %p;\n", addr, len, ptr);
+	eprintf ("mmap (%p, %#zx) = %p;\n", addr, len, ptr);
 
 	if (ptr == NULL)
 		err (1, "mmap()");
blob - 7ae62507ac23f2c3e6716f44bfdb437b02dbc5f6
blob + 03f581641727d6bf3a3b2bde53a69d2d7de35b27
--- test.c
+++ test.c
@@ -1,7 +1,8 @@
 #include <unistd.h>
 #include <string.h>
+#include <stdio.h>
 
-const char *volatile str = "Hello World!\n";
+volatile int x = 42;
 
 __attribute__((always_inline))
 inline static void ebreak (void)
@@ -10,7 +11,6 @@ inline static void ebreak (void)
 }
 
 int main (void) {
-	const size_t len = strlen (str);
-	write (1, str, len);
+	printf ("Hello World, x = %d\n", x);
 	return 0;
 }