[CRT] Cleanup old setjmp

This commit is contained in:
Timo Kreuzer
2025-07-02 21:42:31 +03:00
parent 6d321562c9
commit f18ebe2b73
6 changed files with 0 additions and 366 deletions

View File

@@ -23,7 +23,6 @@ list(APPEND CRT_SOURCE
list(APPEND CRT_ASM_SOURCE
${CRT_EXCEPT_ASM_SOURCE}
${CRT_SETJMP_ASM_SOURCE}
${CRT_STDLIB_ASM_SOURCE}
${CRT_STRING_ASM_SOURCE}
${CRT_WINE_ASM_SOURCE}

View File

@@ -18,7 +18,6 @@ list(APPEND LIBCNTPR_ASM_SOURCE
${LIBCNTPR_FLOAT_ASM_SOURCE}
${LIBCNTPR_MATH_ASM_SOURCE}
${LIBCNTPR_MEM_ASM_SOURCE}
${LIBCNTPR_SETJMP_ASM_SOURCE}
${LIBCNTPR_STRING_ASM_SOURCE}
)

View File

@@ -1,169 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* PURPOSE: Implementation of _setjmp/longjmp
* FILE: lib/sdk/crt/setjmp/amd64/setjmp.s
* PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org)
*/
/* INCLUDES ******************************************************************/
#include <asm.inc>
#include <ksamd64.inc>
#define JUMP_BUFFER_Frame 0 /* 0x00 */
#define JUMP_BUFFER_Rbx 8 /* 0x08 */
#define JUMP_BUFFER_Rsp 16 /* 0x10 */
#define JUMP_BUFFER_Rbp 24 /* 0x18 */
#define JUMP_BUFFER_Rsi 32 /* 0x20 */
#define JUMP_BUFFER_Rdi 40 /* 0x28 */
#define JUMP_BUFFER_R12 48 /* 0x30 */
#define JUMP_BUFFER_R13 56 /* 0x38 */
#define JUMP_BUFFER_R14 64 /* 0x40 */
#define JUMP_BUFFER_R15 72 /* 0x48 */
#define JUMP_BUFFER_Rip 80 /* 0x50 */
#define JUMP_BUFFER_Spare 88 /* 0x58 */
#define JUMP_BUFFER_Xmm6 96 /* 0x60 */
#define JUMP_BUFFER_Xmm7 112 /* 0x70 */
#define JUMP_BUFFER_Xmm8 128 /* 0x80 */
#define JUMP_BUFFER_Xmm9 144 /* 0x90 */
#define JUMP_BUFFER_Xmm10 160 /* 0xa0 */
#define JUMP_BUFFER_Xmm11 176 /* 0xb0 */
#define JUMP_BUFFER_Xmm12 192 /* 0xc0 */
#define JUMP_BUFFER_Xmm13 208 /* 0xd0 */
#define JUMP_BUFFER_Xmm14 224 /* 0xe0 */
#define JUMP_BUFFER_Xmm15 240 /* 0xf0 */
/* FUNCTIONS ******************************************************************/
.code64
/*!
* int _setjmp(jmp_buf env);
*
* \param <rcx> - jmp_buf env
* \return 0
* \note Sets up the jmp_buf
*/
PUBLIC _setjmp
FUNC _setjmp
.endprolog
/* Load rsp as it was before the call into rax */
lea rax, [rsp + 8]
/* Load return address into r8 */
mov r8, [rsp]
mov qword ptr [rcx + JUMP_BUFFER_Frame], 0
mov [rcx + JUMP_BUFFER_Rbx], rbx
mov [rcx + JUMP_BUFFER_Rbp], rbp
mov [rcx + JUMP_BUFFER_Rsi], rsi
mov [rcx + JUMP_BUFFER_Rdi], rdi
mov [rcx + JUMP_BUFFER_R12], r12
mov [rcx + JUMP_BUFFER_R13], r13
mov [rcx + JUMP_BUFFER_R14], r14
mov [rcx + JUMP_BUFFER_R15], r15
mov [rcx + JUMP_BUFFER_Rsp], rax
mov [rcx + JUMP_BUFFER_Rip], r8
movdqa [rcx + JUMP_BUFFER_Xmm6], xmm6
movdqa [rcx + JUMP_BUFFER_Xmm7], xmm7
movdqa [rcx + JUMP_BUFFER_Xmm8], xmm8
movdqa [rcx + JUMP_BUFFER_Xmm9], xmm9
movdqa [rcx + JUMP_BUFFER_Xmm10], xmm10
movdqa [rcx + JUMP_BUFFER_Xmm11], xmm11
movdqa [rcx + JUMP_BUFFER_Xmm12], xmm12
movdqa [rcx + JUMP_BUFFER_Xmm13], xmm13
movdqa [rcx + JUMP_BUFFER_Xmm14], xmm14
movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15
xor rax, rax
ret
ENDFUNC
/*!
* int _setjmpex(jmp_buf _Buf,void *_Ctx);
*
* \param <rcx> - jmp_buf env
* \param <rdx> - frame
* \return 0
* \note Sets up the jmp_buf
*/
PUBLIC _setjmpex
FUNC _setjmpex
.endprolog
/* Load rsp as it was before the call into rax */
lea rax, [rsp + 8]
/* Load return address into r8 */
mov r8, [rsp]
mov [rcx + JUMP_BUFFER_Frame], rdx
mov [rcx + JUMP_BUFFER_Rbx], rbx
mov [rcx + JUMP_BUFFER_Rbp], rbp
mov [rcx + JUMP_BUFFER_Rsi], rsi
mov [rcx + JUMP_BUFFER_Rdi], rdi
mov [rcx + JUMP_BUFFER_R12], r12
mov [rcx + JUMP_BUFFER_R13], r13
mov [rcx + JUMP_BUFFER_R14], r14
mov [rcx + JUMP_BUFFER_R15], r15
mov [rcx + JUMP_BUFFER_Rsp], rax
mov [rcx + JUMP_BUFFER_Rip], r8
movdqa [rcx + JUMP_BUFFER_Xmm6], xmm6
movdqa [rcx + JUMP_BUFFER_Xmm7], xmm7
movdqa [rcx + JUMP_BUFFER_Xmm8], xmm8
movdqa [rcx + JUMP_BUFFER_Xmm9], xmm9
movdqa [rcx + JUMP_BUFFER_Xmm10], xmm10
movdqa [rcx + JUMP_BUFFER_Xmm11], xmm11
movdqa [rcx + JUMP_BUFFER_Xmm12], xmm12
movdqa [rcx + JUMP_BUFFER_Xmm13], xmm13
movdqa [rcx + JUMP_BUFFER_Xmm14], xmm14
movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15
xor rax, rax
ret
ENDFUNC
/*!
* void longjmp(jmp_buf env, int value);
*
* \param <rcx> - jmp_buf setup by _setjmp
* \param <rdx> - int value to return
* \return Doesn't return
* \note Non-local goto
*/
PUBLIC longjmp
FUNC longjmp
.endprolog
// FIXME: handle frame
mov rbx, [rcx + JUMP_BUFFER_Rbx]
mov rbp, [rcx + JUMP_BUFFER_Rbp]
mov rsi, [rcx + JUMP_BUFFER_Rsi]
mov rdi, [rcx + JUMP_BUFFER_Rdi]
mov r12, [rcx + JUMP_BUFFER_R12]
mov r13, [rcx + JUMP_BUFFER_R13]
mov r14, [rcx + JUMP_BUFFER_R14]
mov r15, [rcx + JUMP_BUFFER_R15]
mov rsp, [rcx + JUMP_BUFFER_Rsp]
mov r8, [rcx + JUMP_BUFFER_Rip]
movdqa xmm6, [rcx + JUMP_BUFFER_Xmm6]
movdqa xmm7, [rcx + JUMP_BUFFER_Xmm7]
movdqa xmm8, [rcx + JUMP_BUFFER_Xmm8]
movdqa xmm9, [rcx + JUMP_BUFFER_Xmm9]
movdqa xmm10, [rcx + JUMP_BUFFER_Xmm10]
movdqa xmm11, [rcx + JUMP_BUFFER_Xmm11]
movdqa xmm12, [rcx + JUMP_BUFFER_Xmm12]
movdqa xmm13, [rcx + JUMP_BUFFER_Xmm13]
movdqa xmm14, [rcx + JUMP_BUFFER_Xmm14]
movdqa xmm15, [rcx + JUMP_BUFFER_Xmm15]
/* return param2 or 1 if it was 0 */
mov rax, rdx
test rax, rax
jnz l2
inc rax
l2: jmp r8
ENDFUNC
END

View File

@@ -1,64 +0,0 @@
/*
* COPYRIGHT: BSD - See COPYING.ARM in the top level directory
* PROJECT: ReactOS CRT library
* PURPOSE: Implementation of _setjmp / longjmp
* PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org)
*/
/* INCLUDES ******************************************************************/
#include <kxarm.h>
/* CODE **********************************************************************/
TEXTAREA
LEAF_ENTRY _setjmpex
/* Store r1 (->Frame) and r4 - r11 */
stmia r0!, {r1,r4-r11}
/* Store sp (->Sp), lr (->Pc), fp (->Fpscr) */
mov r1, sp
stmia r0!, {r1,lr,fp}
/* Store NEON registers */
vst1.64 {d0}, [r0]!
vst1.64 {d1}, [r0]!
vst1.64 {d2}, [r0]!
vst1.64 {d3}, [r0]!
vst1.64 {d4}, [r0]!
vst1.64 {d5}, [r0]!
vst1.64 {d6}, [r0]!
vst1.64 {d7}, [r0]!
/* Return 0 */
mov r0, #0
bx lr
LEAF_END _setjmpex
IMPORT _setjmp, WEAK _setjmpex
IMPORT setjmp, WEAK _setjmpex
LEAF_ENTRY longjmp
ldmia r0!, {r1,r4-r11}
ldmia r0!, {r1,lr,fp}
mov sp, r1
/* Load NEON registers */
vld1.64 {d0}, [r0]!
vld1.64 {d1}, [r0]!
vld1.64 {d2}, [r0]!
vld1.64 {d3}, [r0]!
vld1.64 {d4}, [r0]!
vld1.64 {d5}, [r0]!
vld1.64 {d6}, [r0]!
vld1.64 {d7}, [r0]!
/* Return 1 */
mov r0, #1
bx lr
LEAF_END longjmp
END
/* EOF */

View File

@@ -1,113 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* PURPOSE: Implementation of _setjmp/longjmp
* FILE: lib/sdk/crt/setjmp/i386/setjmp.s
* PROGRAMMER: Ge van Geldorp (ge@gse.nl)
* NOTES: Implementation is not complete, see Wine source for a more
* complete implementation
*/
#include <asm.inc>
#define JB_BP 0
#define JB_BX 1
#define JB_DI 2
#define JB_SI 3
#define JB_SP 4
#define JB_IP 5
#define PCOFF 0
#define JMPBUF 4
.code
/*
* int
* _setjmp(jmp_buf env);
*
* Parameters:
* [ESP+04h] - jmp_buf env
* Registers:
* None
* Returns:
* 0
* Notes:
* Sets up the jmp_buf
*/
PUBLIC __setjmp
__setjmp:
xor eax, eax
mov edx, JMPBUF[esp]
/* Save registers. */
mov [edx + JB_BP*4], ebp /* Save caller's frame pointer. */
mov [edx + JB_BX*4], ebx
mov [edx + JB_DI*4], edi
mov [edx + JB_SI*4], esi
lea ecx, JMPBUF[esp] /* Save SP as it will be after we return. */
mov [edx + JB_SP*4], ecx
mov ecx, PCOFF[esp] /* Save PC we are returning to now. */
mov [edx + JB_IP*4], ecx
ret
/*
* int
* _setjmp3(jmp_buf env, int nb_args, ...);
*
* Parameters:
* [ESP+04h] - jmp_buf env
* Registers:
* None
* Returns:
* 0
* Notes:
* Sets up the jmp_buf
*/
PUBLIC __setjmp3
__setjmp3:
xor eax, eax
mov edx, JMPBUF[esp]
/* Save registers. */
mov [edx + JB_BP*4], ebp /* Save caller's frame pointer. */
mov [edx + JB_BX*4], ebx
mov [edx + JB_DI*4], edi
mov [edx + JB_SI*4], esi
lea ecx, JMPBUF[esp] /* Save SP as it will be after we return. */
mov [edx + JB_SP*4], ecx
mov ecx, PCOFF[esp] /* Save PC we are returning to now. */
mov [edx + JB_IP*4], ecx
ret
/*
* void
* longjmp(jmp_buf env, int value);
*
* Parameters:
* [ESP+04h] - jmp_buf setup by _setjmp
* [ESP+08h] - int value to return
* Registers:
* None
* Returns:
* Doesn't return
* Notes:
* Non-local goto
*/
PUBLIC _longjmp
_longjmp:
mov ecx, JMPBUF[esp] /* User's jmp_buf in %ecx. */
mov eax, [esp + 8] /* Second argument is return value. */
/* Save the return address now. */
mov edx, [ecx + JB_IP*4]
/* Restore registers. */
mov ebp, [ecx + JB_BP*4]
mov ebx, [ecx + JB_BX*4]
mov edi, [ecx + JB_DI*4]
mov esi, [ecx + JB_SI*4]
mov esp, [ecx + JB_SP*4]
/* Jump to saved PC. */
jmp edx
END

View File

@@ -1,18 +0,0 @@
if(ARCH STREQUAL "i386")
list(APPEND LIBCNTPR_SETJMP_ASM_SOURCE
setjmp/i386/setjmp.s
)
elseif(ARCH STREQUAL "amd64")
list(APPEND LIBCNTPR_SETJMP_ASM_SOURCE
setjmp/amd64/setjmp.s
)
elseif(ARCH STREQUAL "arm")
list(APPEND LIBCNTPR_SETJMP_ASM_SOURCE
setjmp/arm/setjmp.s
)
endif()
list(APPEND CRT_SETJMP_ASM_SOURCE
${LIBCNTPR_SETJMP_ASM_SOURCE}
)