首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glibc的setjmp代码在哪里?

glibc的setjmp代码在哪里?
EN

Stack Overflow用户
提问于 2015-08-03 10:16:15
回答 1查看 1.3K关注 0票数 6

我对setjmp到底做了什么(至少在x86_64 linux中)很感兴趣,所以我搜索了glibc的源代码,但是我真的找不到寄存器保存的地方。你能解释一下这里发生了什么吗?

setjmp.h

代码语言:javascript
复制
extern int _setjmp (struct __jmp_buf_tag __env[1]) __THROWNL;
#define setjmp(env)     _setjmp (env)

bsd-_setjmp.c

代码语言:javascript
复制
int
_setjmp (jmp_buf env)
{
  return __sigsetjmp (env, 0);
}

libc_hidden_def (_setjmp)

setjmp.c

代码语言:javascript
复制
int
__libc_sigsetjmp (jmp_buf env, int savemask)
{
  __sigjmp_save (env, savemask);
  __set_errno (ENOSYS);
  return 0;
}

weak_alias (__libc_sigsetjmp, __sigsetjmp)
stub_warning (__sigsetjmp)

sigjmp.c

代码语言:javascript
复制
int
__sigjmp_save (sigjmp_buf env, int savemask)
{
  env[0].__mask_was_saved = (savemask &&
                             __sigprocmask (SIG_BLOCK, (sigset_t *) NULL,
                                            &env[0].__saved_mask) == 0);
  return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-03 11:35:10

setjmp是一个调用_setjmp的宏。对于x86_64体系结构,它是用../sysdeps/x86_64/bsd-_setjmp.S定义的。然后,_setjmp将调用在../sysdeps/x86_64/setjmp.S中定义的__sigsetjmp;该函数严格依赖于平台,需要在程序集中实现。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31784802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档