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

标签 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 没有。这是什么原因?

最佳答案

好像两个套路都不对。 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

关于linux - 为什么getcontext和setjmp在glibc-x86-64中保存不同的寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038383/

相关文章:

linux - Go exec.CommandContext 在上下文超时后不会被终止

parallel-processing - 获取进程/线程的上下文切换次数

java - Ant: 没有那个文件或目录

c++ - 传递给 C 库的函数指针的 C 链接

python - 我可以在不成为系统管理员的情况下修复 "version GLIBC_2.14 not found"错误吗?

security - gcc -D_FORTIFY_SOURCE=1 和 -D_FORTIFY_SOURCE=2 之间的区别

c - POSIX C 线程中上下文切换之前当前堆栈指针寄存器的值存储在哪里

php - 从 Riak 读取多个文档的最快方法

linux - 使用 awk 的脚本中出现未知错误