【问题标题】:_AddressOfReturnAddress() equivalent in Clang/LLVM?Clang/LLVM 中的 _AddressOfReturnAddress() 等效项?
【发布时间】:2013-04-03 08:56:55
【问题描述】:

Visual C++ 有an intrinsic function called _AddressOfReturnAddress,它返回堆栈上当前函数的返回地址的地址

注意这与_ReturnAddress相同,后者仅返回返回地址的副本

在 Clang/LLVM 中是否有 _AddressOfReturnAddress 的等价物?

【问题讨论】:

    标签: c visual-c++ llvm clang addressof


    【解决方案1】:

    没有。 LLVM IR 没有为此提供内在函数。

    【讨论】:

    • _AddressOfReturnAddress 没有等价物,但__builtin_return_address_ReturnAddress 等价物。
    【解决方案2】:

    正如rustyx 所指出的,Clang/LLVM(和 gcc)提供了 __builtin_return_address(),它等同于 _ReturnAddress()。 Clang/LLVM 还提供了__builtin_frame_address(),它(取决于您的 ABI、架构等的细节)可能有点类似于 _AddressOfReturnAddress()

    例如,下面的代码...

    std::cout<< ((int64_t) __builtin_return_address(0)) << ' '
             << ((int64_t) __builtin_frame_address (0)) << ' '
             <<*((int64_t*)__builtin_frame_address (0)+1)<<'\n';
    

    ...在 OSX 机器上打印以下内容。

    140735807202733 140734600362944 140735807202733
    

    【讨论】:

    • +1 不是我需要它或有机会再检查它,但我认为这可能也是我最终采用的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多