RFR(XS): MallocSiteTable::initialize() doesn't take function descriptors into account
zgu at redhat.com
Mon Jul 2 23:09:14 UTC 2018
fp should work with little endian as well, right?
I wonder if change
pc = (address)MallocSiteTable::allocation_at;
pc = (address)(&MallocSiteTable::allocation_at);
On 07/02/2018 01:27 PM, Volker Simonis wrote:
> can I please have a review for this trivial change which fixes a
> problem on Linux/ppc64
> MallocSiteTable::initialize() creates a pseudo call stack for
> hashtable entry allocations which is populated with the addresses of
> some well-known static methods.
> However, taking the address of a function or static method in C/C++
> isn't required to return the actual code address where that function
> lives in memory. On ppc64 (i.e. big-endian, ABI ELFv1) applying the
> address operator on a function will return the functions "function
> descriptor" (see
> which is a struct of three pointers where the first one points to the
> actual function address.
> In order to get a correct stack trace on ppc64 as well, we therefore
> have to dereference the function descriptor before we can store the
> real function address in the stack trace.
> In order to make the shared code fix less intrusive, I've added a pair
> of LITTLE_ENDIAN_ONLY/BIG_ENDIAN_ONLY macros to macros.hpp.
> This bug is the reason why runtime/ElfDecoder/TestElfDirectRead.java
> fails on Linux/ppc64.
> Thank you and best regards,
More information about the hotspot-dev