RFR: 8163014: Mysterious/wrong value for "long" frame local variable on 64-bit

Max Ockner max.ockner at oracle.com
Tue Sep 6 21:33:51 UTC 2016


Hello,
Please review this multi-platform fix for the stack walk API.

Bug: https://bugs.openjdk.java.net/browse/JDK-8163014
Webrev: http://cr.openjdk.java.net/~mockner/8163014.01/

In 64 bits, long values can fit into a single slot, but two slots are 
still used. The high slot contains garbage. This normally wouldn't 
matter since it is never read from but the stack walk API expects to 
display useful information. This is an issue when displaying longs from 
local variables, so this means we can kill any garbage off by zeroing it 
when it is pushed to the stack in the previous frame. This solution 
zeroes the high byte of a long value when it is being pushed to the 
stack (in push_l).

This applies to x86, aarch64, and sparc. This change does not apply to 
ppc, though the bug almost certainly does affect it. I have left ppc 
untouched since I don't have access to the hardware required to 
reproduce the bug and test the fix.

I have adapted the reproducer from the bug into a test. It is curently 
sitting in runtime/locallong, but I believe there must be a better place 
for it.

Thanks,
Max


More information about the hotspot-runtime-dev mailing list