summaryrefslogtreecommitdiff
path: root/arch/riscv/lib/semihosting.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/riscv/lib/semihosting.S')
-rw-r--r--arch/riscv/lib/semihosting.S22
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/riscv/lib/semihosting.S b/arch/riscv/lib/semihosting.S
new file mode 100644
index 00000000000..c0c571bce9b
--- /dev/null
+++ b/arch/riscv/lib/semihosting.S
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2022 Ventana Micro Systems Inc.
+ */
+
+#include <asm/asm.h>
+#include <linux/linkage.h>
+
+.pushsection .text.smh_trap, "ax"
+ENTRY(smh_trap)
+ .align 2
+ .option push
+ .option norvc /* semihosting sequence must be 32-bit wide */
+
+ slli zero, zero, 0x1f /* Entry NOP to identify semihosting */
+ ebreak
+ srai zero, zero, 7 /* NOP encoding of semihosting call number */
+ .option pop
+
+ ret
+ENDPROC(smh_trap)
+.popsection