Source: st
Version: 1.9-3.2
Severity: wishlist
Tags: patch

Dear Maintainer,

I backport riscv support from https://github.com/ossrs/state-threads, build 
succeed.

But maybe we should update this package from this repo? this repo has newer 
code and 
more architecture support already in it.

Cheers,
Yifan Xu
backport riscv support from https://github.com/ossrs/state-threads
Index: st-1.9/md.S
===================================================================
--- st-1.9.orig/md.S
+++ st-1.9/md.S
@@ -431,5 +431,81 @@ _st_md_cxt_restore:
 
 /****************************************************************/
 
+#elif defined(__riscv)
+
+    /****************************************************************/
+    /*
+     * Internal __jmp_buf layout
+     * riscv-asm: 
https://github.com/riscv/riscv-asm-manual/blob/master/riscv-asm.md
+     */
+    #define JB_SP  0    /* A0, SP, Stack pointer */
+    #define JB_RA  1    /* RA, Return address */
+    #define JB_FP  2    /* FP/S0 Frame pointer */
+    #define JB_S1  3    /* S1 Saved register*/
+    #define JB_S2  4    /* S2-S11,  Saved register */
+    #define JB_S3  5    /* S2-S11,  Saved register */
+    #define JB_S4  6    /* S2-S11,  Saved register */
+    #define JB_S5  7    /* S2-S11,  Saved register */
+    #define JB_S6  8    /* S2-S11,  Saved register */
+    #define JB_S7  9    /* S2-S11,  Saved register */
+    #define JB_S8  10    /* S2-S11,  Saved register */
+    #define JB_S9  11   /* S2-S11,  Saved register */
+    #define JB_S10 12   /* S2-S11,  Saved register */
+    #define JB_S11 13   /* S2-S11,  Saved register */
+
+
+       .file "md.S"
+       .text
+
+       /* _st_md_cxt_save(__jmp_buf env) */ /* The env is $a0, 
https://en.wikipedia.org/wiki/RISC-V#Register_sets */
+       .globl _st_md_cxt_save
+       .type _st_md_cxt_save, %function
+       .align 2
+    _st_md_cxt_save:
+       sd    sp,  JB_SP  * 8(a0)
+       sd    ra,  JB_RA  * 8(a0)
+       sd    s0,  JB_FP  * 8(a0)
+       sd    s1,  JB_S1  * 8(a0)
+       sd    s2,  JB_S2  * 8(a0)
+       sd    s3,  JB_S3  * 8(a0)
+       sd    s4,  JB_S4  * 8(a0)
+       sd    s5,  JB_S5  * 8(a0)
+       sd    s6,  JB_S6  * 8(a0)
+       sd    s7,  JB_S7  * 8(a0)
+       sd    s8,  JB_S8  * 8(a0)
+       sd    s9,  JB_S9  * 8(a0)
+       sd    s10, JB_S10 * 8(a0)
+       sd    s11, JB_S11 * 8(a0)
+       li    a0,  0
+       jr    ra
+       .size _st_md_cxt_save, .-_st_md_cxt_save
+
+    /****************************************************************/
+
+       /* _st_md_cxt_restore(__jmp_buf env, int val) */
+       .globl _st_md_cxt_restore
+       .type _st_md_cxt_restore, %function
+       .align 2
+    _st_md_cxt_restore:
+       ld        sp,  JB_SP  * 8(a0)
+       ld        ra,  JB_RA  * 8(a0)
+       ld        s0,  JB_FP  * 8(a0)
+       ld        s1,  JB_S1  * 8(a0)
+       ld        s2,  JB_S2  * 8(a0)
+       ld        s3,  JB_S3  * 8(a0)
+       ld        s4,  JB_S4  * 8(a0)
+       ld        s5,  JB_S5  * 8(a0)
+       ld        s6,  JB_S6  * 8(a0)
+       ld        s7,  JB_S7  * 8(a0)
+       ld        s8,  JB_S8  * 8(a0)
+       ld        s9,  JB_S9  * 8(a0)
+       ld        s10, JB_S10 * 8(a0)
+       ld        s11, JB_S11 * 8(a0)
+       li        a0,  1
+       jr        ra
+       .size _st_md_cxt_restore, .-_st_md_cxt_restore
+
+    /****************************************************************/
+
 #endif
 
Index: st-1.9/md.h
===================================================================
--- st-1.9.orig/md.h
+++ st-1.9/md.h
@@ -442,6 +442,11 @@
 #error "ARM64/Linux pre-glibc2 not supported yet"
 #endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
 
+#elif defined(__riscv)
+#define MD_STACK_GROWS_DOWN
+#define MD_USE_BUILTIN_SETJMP
+#define MD_GET_SP(_t) *((long *)&((_t)->context[0].__jmpbuf[0]))
+
 #elif defined(__s390__)
 #define MD_STACK_GROWS_DOWN
 

Reply via email to