Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Sep 2013 18:56:47 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 717817 for review
Message-ID:  <201309151856.r8FIulgM052749@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@717817?ac=10

Change 717817 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/09/15 18:56:33

	Add two new test comments to bin/cheritest: list privileged CP2
	registers, and list the CP2 cause register.  Both should (and do)
	cause SIGPROT for the user process.

Affected files ...

.. //depot/projects/ctsrd/cheribsd/src/bin/cheritest/cheritest.c#15 edit

Differences ...

==== //depot/projects/ctsrd/cheribsd/src/bin/cheritest/cheritest.c#15 (text+ko) ====

@@ -71,6 +71,8 @@
 	fprintf(stderr, "cheritest ccall\n");
 	fprintf(stderr, "cheritest copyregs\n");
 	fprintf(stderr, "cheritest creturn\n");
+	fprintf(stderr, "cheritest listcausereg\n");
+	fprintf(stderr, "cheritest listprivregs\n");
 	fprintf(stderr, "cheritest listregs\n");
 	fprintf(stderr, "cheritest overrun\n");
 	fprintf(stderr, "cheritest sandbox\n");
@@ -125,6 +127,32 @@
 }
 
 static void
+cheritest_listcausereg(void)
+{
+	register_t cause;
+
+	printf("CP2 cause register:\n");
+	CHERI_CGETCAUSE(cause);
+	printf("Cause: %ju\n", (uintmax_t)cause);
+}
+
+static void
+cheritest_listprivregs(void)
+{
+
+	/*
+	 * Because of the assembly generated by CP2_CR_GET(), can't use a loop
+	 * -- register numbers must be available at compile-time.
+	 */
+	printf("CP2 privileged registers:\n");
+	CHERI_CAPREG_PRINT(27);
+	CHERI_CAPREG_PRINT(28);
+	CHERI_CAPREG_PRINT(29);
+	CHERI_CAPREG_PRINT(30);
+	CHERI_CAPREG_PRINT(31);
+}
+
+static void
 cheritest_listregs(void)
 {
 
@@ -270,7 +298,11 @@
 	CHERI_CMOVE(1, 0);
 
 	for (i = 0; i < argc; i++) {
-		if (strcmp(argv[i], "listregs") == 0)
+		if (strcmp(argv[i], "listcausereg") == 0)
+			cheritest_listcausereg();
+		else if (strcmp(argv[i], "listprivregs") == 0)
+			cheritest_listprivregs();
+		else if (strcmp(argv[i], "listregs") == 0)
 			cheritest_listregs();
 		else if (strcmp(argv[i], "ccall") == 0)
 			cheritest_ccall();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309151856.r8FIulgM052749>