Эквивалент _AddressOfReturnAddress() в Clang/LLVM?

Visual C++ имеет встроенную функцию под названием _AddressOfReturnAddress который возвращает адрес возврата текущей функции в стеке.

Обратите внимание, что это не то же самое, что _ReturnAddress, который возвращает только копию обратного адреса.

Есть ли эквивалент для _AddressOfReturnAddress в Clang/LLVM?

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

Нет. LLVM IR не обеспечивает этого.

Другие вопросы по тегам