tests: add the test case for user space support of arc

add arc specific codes in tests/kernel/mem_protect/userspace

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
diff --git a/tests/kernel/mem_protect/userspace/src/main.c b/tests/kernel/mem_protect/userspace/src/main.c
index ca4447d..3ddd717 100644
--- a/tests/kernel/mem_protect/userspace/src/main.c
+++ b/tests/kernel/mem_protect/userspace/src/main.c
@@ -13,6 +13,10 @@
 #include <string.h>
 #include <stdlib.h>
 
+#if defined(CONFIG_ARC)
+#include <arch/arc/v2/mpu/arc_core_mpu.h>
+#endif
+
 #define INFO(fmt, ...) printk(fmt, ##__VA_ARGS__)
 #define PIPE_LEN 1
 #define BYTES_TO_READ_WRITE 1
@@ -49,7 +53,7 @@
  * and immediately fires upon completing the exception path; the faulting
  * thread is never run again.
  */
-#ifndef CONFIG_ARM
+#if !defined(CONFIG_ARM) && !defined(CONFIG_ARC)
 FUNC_NORETURN
 #endif
 void _SysFatalErrorHandler(unsigned int reason, const NANO_ESF *pEsf)
@@ -63,6 +67,7 @@
 		give_uthread_end_sem = false;
 		k_sem_give(&uthread_end_sem);
 	}
+
 	if (expect_fault && expected_reason == reason) {
 		expect_fault = false;
 		expected_reason = 0;
@@ -111,6 +116,13 @@
 		);
 	zassert_true((msr_value & 1),
 		      "Write to control register was successful\n");
+#elif defined(CONFIG_ARC)
+	unsigned int er_status;
+	/* _ARC_V2_ERSTATUS is privilege aux reg */
+	__asm__ volatile(
+		"lr %0, [0x402]\n"
+		: "=r" (er_status)::
+		);
 #else
 #error "Not implemented for this architecture"
 	zassert_unreachable("Write to control register did not fault\n");
@@ -134,6 +146,8 @@
 	expected_reason = REASON_HW_EXCEPTION;
 	BARRIER();
 	arm_core_mpu_disable();
+#elif defined(CONFIG_ARC)
+	arc_core_mpu_disable();
 #else
 #error "Not implemented for this architecture"
 #endif