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

