我正在尝试创建用户级线程库。我有一个叫做的函数
在void switch_thread(tcb* currSp,tcb* newSp)
中实现的tcb* currSp
,tcb* newSp
是当前线程和新线程的堆栈指针。 switch_thread
函数应该在x86程序集中实现。
我的问题是如何在x86程序集中将堆栈指针当前线程更改为新线程。
.text
.global switch_thread
switch_thread:
mov 0x4(%esp), %eax #current thread
mov 0x8(%esp), %ecx #new thread
//no idea how to implement rest of it.
答案 0 :(得分:3)
<ucontext.h>
中的功能正是如此,setcontext()
就是你想要的。此功能在GLIBC中实现,the source file for it可以在互联网上的各个位置找到。
随便查看程序集,它基本上恢复浮点上下文,然后恢复所有其他寄存器。