Commit 3f5e5f42 authored by Sebastian Zenker's avatar Sebastian Zenker

Fixed core dump in GetFunctorStartAddress() for ARM platforms.

The method to determine, if a pointer to a member function points to a virtual method or not, depends on the ABI. Please see also:
* http://infocenter.arm.com/help/topic/com.arm.doc.ihi0041e/IHI0041E_cppabi.pdf chapter 3.2
* https://blog.mozilla.org/nfroyd/2014/02/20/finding-addresses-of-virtual-functions/
parent 58da9da9
...@@ -285,9 +285,14 @@ class PtmfHelper { ...@@ -285,9 +285,14 @@ class PtmfHelper {
#undef BODY #undef BODY
void* apply(void* obj) { void* apply(void* obj) {
#if defined(__arm__) || defined(__mips__) || defined(__aarch64__)
if (adj & 1) {
ptrdiff_t voff = (ptrdiff_t)ptr;
#else
ptrdiff_t voff = (ptrdiff_t)ptr; ptrdiff_t voff = (ptrdiff_t)ptr;
if (voff & 1) { if (voff & 1) {
voff &= ~1; voff &= ~1;
#endif
return *(void**)(*(char**)obj + voff); return *(void**)(*(char**)obj + voff);
} else { } else {
return ptr; return ptr;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment