2013-04-11 5 views
3

Visual C++ имеет an intrinsic function called _AddressOfReturnAddress, который возвращает адрес обратного адреса текущей функции в стеке._AddressOfReturnAddress() эквивалент в Clang/LLVM?

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

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

ответ

1

Как указано 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 
+0

+1 не то, что мне это нужно, или у меня есть возможность проверить его больше, но я думаю, что это, вероятно, решение, в котором я тоже пошел. Благодаря! – Mehrdad

2

№ LLVM IR не является неотъемлемой частью этого.

+0

Там нет эквивалента для '_AddressOfReturnAddress' но есть' __builtin_return_address' который является эквивалентом для '_ReturnAddress'. – rustyx