Paul Muntean via llvm-dev
2016-Dec-09 12:46 UTC
[llvm-dev] Recuperate return addresses of virtual and non virtual C++ functions with Clang and LLVM
I am working with this setup: LLVM+Clang Compiler on an Ubuntu 64bit OS. Since I just started working with this impressive framework I have some questions: Is it possible to get the return addresses of virtual function call and non virtual C++ methods inside Clang and LLVM. Is thre a way to get the candidate addresses where the return address points back after each function return was performed. I have a few questions and hopefully you guys can help me out. The return-addresses of indirect function calls to virtual functions (and thus v-tables), are they pointers? If not, what format do they have? How are those handled by Clang? Is the return address of a non virtual function in Clang a pointer or a hardcoded value? How can I get the return addresses of an indirect call to a virtual function using LLVM? Do i have to import them from Clang and make them available during LTO? Is thinLTO a better candidate for helping me recuperate this information? Does the return address of a function called from an indirect call-site always jump back to the next line (instruction) of assembly code after the callsite instruction. Are there some occurrences where it doesn't? How is this handled in Clang?