【发布时间】:2021-10-14 01:50:24
【问题描述】:
System V AMD64 ABI 是否说明了段寄存器 %gs?它被认为是调用者保存还是被调用者保存?还是保留?或者还没有为 %gs 定义任何内容?
【问题讨论】:
-
我想你知道从哪里获取 ABI 文档本身,并且已经在其中搜索了
gs。但没有相关匹配。 -
请注意,
%gs或%gs.base的典型用途是将其设置在某个实用程序函数中,然后在程序的其余部分设置它,直到另行通知,如全局多变的。将其设置为调用者保存或被调用者保存将使该策略变得不可能。无论如何,它肯定不是保留的——我相信它是供程序员使用的。 -
是的,我没有通过搜索我拥有的 ABI 文档找到它,所以我一直想知道是否真的有任何关于它的说明。我一直在考虑使用它来访问在运行时生成的汇编代码的线程本地数据。 “旨在供程序员使用”的问题在于它使程序或库不可组合。 Callee-save 实际上对我来说是最好的。
-
至少,我认为您可以放心地假设任何不遵循“被调用者保存”策略的代码,至少在其外部接口处,都需要显着地记录这一事实。跨度>
标签: assembly x86-64 calling-convention abi memory-segmentation