diff --git a/examples/standalone/riscv.lds b/examples/standalone/riscv.lds
new file mode 100644
index 0000000000000000000000000000000000000000..7d8c482250dff18335487c8f44219685b1607608
--- /dev/null
+++ b/examples/standalone/riscv.lds
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 Andes Technology Corporation
+ * Rick Chen, Andes Technology Corporation <rick@andestech.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+OUTPUT_ARCH(riscv)
+ENTRY(_start)
+SECTIONS
+{
+    . = ALIGN(4);
+    .text :
+    {
+        *(.text)
+    }
+
+    . = ALIGN(4);
+    .data : {
+			__global_pointer$ = . + 0x800;
+			*(.data)
+		}
+
+    . = ALIGN(4);
+
+    .got : {
+        __got_start = .;
+        *(.got)
+        __got_end = .;
+    }
+
+     . = ALIGN(4);
+    __bss_start = .;
+    .bss : { *(.bss) }
+    __bss_end = .;
+
+    . = ALIGN(4);
+    .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+
+    _end = .;
+}
diff --git a/examples/standalone/stubs.c b/examples/standalone/stubs.c
index 9c7a8c00f8b222dbb0a869827d997960fdb1f1fe..fadde669fa94ff185b97d594427d3072a73006f5 100644
--- a/examples/standalone/stubs.c
+++ b/examples/standalone/stubs.c
@@ -172,6 +172,18 @@ gd_t *global_data;
 "	lwi	$r16, [$r16 + (%1)]\n"	\
 "	jr	$r16\n"			\
 	: : "i"(offsetof(gd_t, jt)), "i"(FO(x)) : "$r16");
+#elif defined(CONFIG_RISCV)
+/*
+ * t7 holds the pointer to the global_data. gp is call clobbered.
+ */
+#define EXPORT_FUNC(f, a, x, ...)	\
+	asm volatile (			\
+"	.globl " #x "\n"		\
+#x ":\n"				\
+"	lw	x19, %0(gp)\n"		\
+"	lw	x19, %1(x19)\n"		\
+"	jr	x19\n"			\
+	: : "i"(offsetof(gd_t, jt)), "i"(FO(x)) : "x19");
 #elif defined(CONFIG_ARC)
 /*
  * r25 holds the pointer to the global_data. r10 is call clobbered.