[11] RFR(XS): MallocSiteTable::initialize() doesn't take function descriptors into account
Zhengyu Gu
zgu at redhat.com
Mon Jul 2 23:09:14 UTC 2018
Hi Volker,
fp[0] should work with little endian as well, right?
I wonder if change
pc[2] = (address)MallocSiteTable::allocation_at;
to
pc[2] = (address)(&MallocSiteTable::allocation_at);
will work.
Thanks,
-Zhengyu
On 07/02/2018 01:27 PM, Volker Simonis wrote:
> 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