From 443c35f53d5e030b2aef4f00599e647139a8a53f Mon Sep 17 00:00:00 2001 From: Stephan Date: Sun, 16 Jul 2023 00:12:29 +0200 Subject: [PATCH] add NMI handler to libmips-rt --- mips-rt/Cargo.toml | 2 +- mips-rt/link.x | 4 +- mips-rt/native_lib/Makefile | 3 +- mips-rt/native_lib/crt0.S | 85 +++++++------------------ mips-rt/native_lib/exception_context.S | 39 +++--------- mips-rt/native_lib/exception_table.S | 4 +- mips-rt/native_lib/isr_context.S | 4 +- mips-rt/native_lib/libmips-rt.a | Bin 21936 -> 21732 bytes 8 files changed, 43 insertions(+), 98 deletions(-) diff --git a/mips-rt/Cargo.toml b/mips-rt/Cargo.toml index 0946451..f6eab22 100644 --- a/mips-rt/Cargo.toml +++ b/mips-rt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mips-rt" -version = "0.3.2" +version = "0.3.3" authors = ["Stephan #include -.extern _general_exception_handler -.section .text.general_exception, "ax" +.section .text.exception_context, "ax" .set noreorder .set noat .set nomips16 -.globl _general_exception_context -.ent _general_exception_context +.globl _exception_context +.ent _exception_context -_general_exception_context: +_exception_context: # Save off the non-callee saved registers that may get mucked with addiu sp, sp, -88 @@ -50,24 +51,11 @@ _general_exception_context: mfhi t0 sw t0, 80(sp) -#if defined(__PIC__) - lw t9,%call16(_general_exception_handler)(gp) - nop - # Pass Cause and Status to the handler function - mfc0 a0, _CP0_CAUSE - mfc0 a1, _CP0_STATUS - jalr t9 - nop -#else - la k0,_general_exception_handler - nop - # Pass Cause and Status to the handler function mfc0 a0, _CP0_CAUSE mfc0 a1, _CP0_STATUS jalr k0 nop -#endif lw t0, 80(sp) mthi t0 @@ -97,11 +85,4 @@ _general_exception_context: ehb eret - .end _general_exception_context - -.weak _general_exception_handler -.ent _general_exception_handler -_general_exception_handler: - jr ra - nop -.end _general_exception_handler + .end _exception_context diff --git a/mips-rt/native_lib/exception_table.S b/mips-rt/native_lib/exception_table.S index dddc69c..d6e9cf1 100644 --- a/mips-rt/native_lib/exception_table.S +++ b/mips-rt/native_lib/exception_table.S @@ -21,8 +21,8 @@ _default_isr_fn: .ent _gen_exception .global _gen_exception _gen_exception: - la k0,_general_exception_context - jr k0 + la k0,_general_exception_handler + j _exception_context nop .end _gen_exception diff --git a/mips-rt/native_lib/isr_context.S b/mips-rt/native_lib/isr_context.S index 35acc5c..3b94f30 100644 --- a/mips-rt/native_lib/isr_context.S +++ b/mips-rt/native_lib/isr_context.S @@ -1,7 +1,7 @@ /* - * wrapper for exception handlers that saves registers on the stack + * wrapper for interrupt handlers that saves registers on the stack * - * address of exception handler to be called must be in register k0 + * address of interrupt handler to be called must be in register k0 * */ diff --git a/mips-rt/native_lib/libmips-rt.a b/mips-rt/native_lib/libmips-rt.a index 7c3739e5e1f30732e8c002ff63e94ea4c052a8a6..76872625e516e68af22a0e2de5d945eb84872106 100644 GIT binary patch delta 3678 zcmZXXdu$X{6vpq}-P!H3Ep4Hc-M*%@&~{4|C`H&(XlYU29bTGLG!zPnD3+=Z-#RC{?9GDnog))jnF` z9Z}w1&~(7JED=!c!%ekkcfkhLzNty6f(E7TtOUyF|4`qrX|cDCrY(8HGh0)GuPoYy z!`y>v5G#&a`OKbJo3P^h6w178q)&a7)@Gmu^lGR)YpWO7qm=1(IGqUHAQ8i4MgV4sfT9T~nkeHY%FskJohU;S%~V~^O_XyJP&6@`n}DJTD4H05i z0!_5grV4JNf}5!1CZK2niYBVK2`HL?qKPOs5k(U-X>XL9sOBc1Xrg+FM~$Fs)n)#g zi8!&LXEVF{pBuX+GvPD$1X;{KE7z6FU3t7KH@mXq$}3#C^TwP|kKPE>)2{r2EAMdS z{jPk(l~1|yw>RV#{0nXXxT~7msVwFfDRkv3SFWdc%+|}O54wQ{pwCkhx}Q?eGZd+} zJ<6i``Vu{g+UjlHOmS!j^+9`R0QwRop@%31y+Dzvw$7j!G)isIxfF-qM}5$zXaKsC zlF;`l1^s~{4Ytmq7<2-)K^IdT`VjR&alJuzQxf_KrJz?RGR@Xuia}%42ECKw&_}2b zx|s%`Z&4C@no`i~6q#=8Qi?%mP#bh5#i5T;A9O1XKo3$9dY)3y07V*YT}3hI9BPB! zOL6Fv)Cb)`1JL&<3B63IMmsk<^zVt{8QndF;6HzHn@zDX^MJ2~pBD~ienI#*!r{y>3jbC( zocVXcFA0Y;{~jFQudK^bfOFvo8StZUIP;%`|12EN{1@Svf%p`_ng1sIcj0j6SA=7t zO7H+|a3LjyKV<-%`Cq~@qw)T5=6?&nCLGTEx^T>Vyg!_|#!QFB@(B0nM7rRW0;WhF z0OtXgaKCUk^MG(nrMy3!c~JNe;c(_5;hDnW%(M8x3`aCn3UDrD%YYo=aOSzfhY5!> zA1)lvXna6$<|BmX3x_iwDLfID0-OsGDHI5YGcOcgBplAXSa^wWICEQgsc<;+QNqj8 zJmJR%7s{o8r%vtw&U}pU3gK|(mBOop!!edBW!l zhnH|+ffQP$0B7#d9gAwcvD)#J6^w@0Vz0q3TS2@DUAwMc#>-Y7on3S{%~|{qtsF8n z_}^nWy*Q+nrZ3q-v-9&jM-@FDDzk9mrr(!>$MLST3;k!%150hI2hRz4cvpI}2r~}9 LmHhwtzFYkR^|=I` delta 3858 zcmZ9PX>3$g6vywKnKv`9GeQfcbeVQaX=$fmTc8Mqp&PgiLdPnoC?Ez$9c5|ixM0-z zV$?~9NRClST+o>4L=%Z60Sq5%;s;AyP;mh_P+Z0p6_HK!f6ttf;oao@|M&dPy>H%m z+q`=utGB!W z8`n~gZ~T_$uLwzaVd9=OiGfsd!}^vDtwn1FQ*H1qV<%CIw%r|V?ewg_sr;D6&WqJR zJAOy0CUt=-Qm(OT2TgaERr;g&)du^7!XUKOmEFUh>(W|vj~{wnuhS)iiM1_*i8~Uh zmOD~64yNuLplbI;bm+=$blhF)DpnNq)TM`U_{EqVz-D3dVDn>Jh|TO5X>Kc^ZTTPK z*o-r+8=Gx9()MA(HuTN@eAq_!cNO}D``d&7ze6iMldQ+lUrk+s`k)&Jm*!I;^xhr~k*`NTc<$(Zsul5> zg8Urxn+o#hQs}r*UylHDW?U|1(;tC;8dy38hf>(g&?^L(lR6Hk^qPVJhOKhM>m2d@ zj`$HrytyzoXZH!Z+Z&F&REW`k%@L~`MsI@ey>VLRTbafHt2BRsyl``D)?PIq3Ba>5|!& z741X`G{5X}y_hm(aeWgVfZj)uiE;fnZG^r`Bha^~qCD>UqLXeb?{gjNq&Ld@bdcAyrhz^$JQtQ?whpiR_xVevy_#_fQtPpH9}qUB7hGqHv$~(AIEVhbRYar;ggV zDFTWjpeSMz7Xd{PP!v&zB6{eyIuy}EZ`5%Sleq{eih!aBD2k}(BA_S&iXs}ghz1nV zO9vZJL@zZ@;UcDR5l|G-$VEU=1QbOyaS>1y0Ywo_C}IIEif|DTE&_@ony+#lEu}}B z>%5_vN>vBwvB1F4l&LQS(`WI7k2Z7H72~NNZ6>aE#I24v>WKRs@%4^)-T84^-FrSz zn;h|0NBoK--sOn*I^s_qaqhf$fl|lM19%ad=UAFK0}~u^qa&V0c1KuWO%dqb6oWoR zN$76MKo3&3BkVfup}ie7=B5IgPxjofUPTdTnqtsxl!U%X8R$2Zg}P}3T2DFX#bnP5 z>zgS8eVAgKe z2VF+?{II@@BG4x(2HizT=mE+=Pf-?HMI+EC<)ACc?hNY(C<1+sV$fkqLJw00>Y^-k zGL1kNQVyCRyDO|8q6qXQib3C|Bs51EXwlH_t`ja=?6Zg7?QQk*oA5n(6T(fi-j^6| zUizMWjFt6)a5(c1g?}U*&V0Y{kA=gTe;cARNv-|4Ecq)&-J)b7G847%LpkyjXaNa5(dE!p94TGcOfB zK{%Xwned5* z@GjwS=H0@3g!iN+(JP4sl7RDsg~Bfu4rhLe@JofmnO`P6CLGRuk?_lf!9rc}h5rw%D+luc