Skip to content

Instantly share code, notes, and snippets.

@grissiom
Last active December 22, 2015 08:29
Show Gist options
  • Save grissiom/6445303 to your computer and use it in GitHub Desktop.
Save grissiom/6445303 to your computer and use it in GitHub Desktop.
dark art in GCC

Find First Set:从低位开始,获取第一个置位的位。如果所有位都是 0,返回 0。如果第一位置位,返回 1,等等:

int __builtin_ffs(int);

直接调用会被 inline。

获取函数的返回地址:

void* __builtin_return_address(int level);

level 为嵌套层数。如果为 0 则返回当前所在函数的返回地址。如果为 1,则返回 caller 的返回地址等等…… 并不是所有的体系结构都支持所有的 level( ARM 中只支持 __builtin_return_address(0))。如果 level 不被支持,则会产生编译错误。

ARM 中直接引用 sp 的值:

register unsigned long sp asm ("sp");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment