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

时间:2014-11-20 11:24:29

标签: linux glibc context-switch setjmp ucontext

以下是他们的源代码: https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/unix/sysv/linux/x86_64/getcontext.S;hb=HEAD https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/x86_64/setjmp.S;hb=HEAD

正如您所看到的,getcontext还保存了浮点上下文和寄存器r8和r9,而setjmp则没有。这是什么原因?

1 个答案:

答案 0 :(得分:1)

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

参考:

http://www.boost.org/doc/libs/1_57_0/libs/context/doc/html/context/rationale/x86_and_floating_point_env.html