diff --git a/module/lua/setjmp/setjmp_arm.S b/module/lua/setjmp/setjmp_arm.S index 8c08f4e6f2ec..78bc3e0b347d 100644 --- a/module/lua/setjmp/setjmp_arm.S +++ b/module/lua/setjmp/setjmp_arm.S @@ -31,12 +31,19 @@ #if defined(__arm__) && !defined(__aarch64__) +#if defined(__thumb2__) +#define _FUNC_MODE .code 16; .thumb_func +#else +#define _FUNC_MODE .code 32 +#endif + #define ENTRY(x) \ .text; \ + .syntax unified; \ .align 2; \ .global x; \ .type x,#function; \ - .code 32; \ + _FUNC_MODE; \ x: #define END(x) \ @@ -49,13 +56,23 @@ x: * setjump + longjmp */ ENTRY(setjmp) +#if defined(__thumb2__) + mov ip, sp + stmia r0, {r4-r12,r14} +#else stmia r0, {r4-r14} +#endif mov r0, #0x00000000 RET END(setjmp) ENTRY(longjmp) +#if defined(__thumb2__) + ldmia r0, {r4-r12,r14} + mov sp, ip +#else ldmia r0, {r4-r14} +#endif mov r0, #0x00000001 RET END(longjmp)