[11] RFR(XS): MallocSiteTable::initialize() doesn't take function descriptors into account
Volker Simonis
volker.simonis at gmail.com
Mon Jul 2 17:27:22 UTC 2018
Hi,
can I please have a review for this trivial change which fixes a
problem on Linux/ppc64
http://cr.openjdk.java.net/~simonis/webrevs/2018/8206173/
https://bugs.openjdk.java.net/browse/JDK-8206173
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
http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-DES)
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,
Volker
More information about the hotspot-dev
mailing list