Linux 为什么getcontext和setjmp在glibc-x86-64中保存不同的寄存器

Linux 为什么getcontext和setjmp在glibc-x86-64中保存不同的寄存器,linux,glibc,context-switch,setjmp,ucontext,Linux,Glibc,Context Switch,Setjmp,Ucontext,以下是他们的源代码: 如您所见,getcontext还保存浮点上下文和寄存器r8和r9,而setjmp不保存。这是什么原因?似乎两个例程都是错误的。Setjmp不应忽略浮点状态,getcontext不应保存r8、r9 参考: 那么呢?你是否将此报告为bug?如果得到证实,你提到的问题看起来很严重。老实说,我希望在这种情况下会有更多的抱怨,除非这些只是参考实现,并且内核正在提供实际的代码。你为什么不开一家快餐店呢?他们似乎很有反应。我会的,但我知之甚少:我只是在评估setjmp/getconte

以下是他们的源代码:


如您所见,getcontext还保存浮点上下文和寄存器r8和r9,而setjmp不保存。这是什么原因?

似乎两个例程都是错误的。Setjmp不应忽略浮点状态,getcontext不应保存r8、r9

参考:


那么呢?你是否将此报告为bug?如果得到证实,你提到的问题看起来很严重。老实说,我希望在这种情况下会有更多的抱怨,除非这些只是参考实现,并且内核正在提供实际的代码。你为什么不开一家快餐店呢?他们似乎很有反应。我会的,但我知之甚少:我只是在评估setjmp/getcontext的用法。getcontext应该保存r8、r9,因为它是为了保存整个线程状态,而不仅仅是从非本地跳转(例如setjmp)返回。ucontext_t用于信号处理程序中,用于更改SIGILL/SIGSEGV/etc上的CPU状态。