RFR(S): 8080650: enable stubs to use frame pointers correctly
zoltan.majo at oracle.com
Mon Oct 12 12:42:47 UTC 2015
please review the following patch for JDK-8080650.
Problem: The following stack frame layout allows external tools (e.g.,
Linux perf or Solaris pstack) to determine the call chain currently on
0x108 | return address | | caller's frame
0x100 | RBP of caller | | callee's frame
The example above assumes a 64-bit architecture, the addresses 0x108 and
0x100 are randomly chosen.
For stack tracing to work, RBP must have the value 0x100 while execution
is in the method "callee". However, when HotSpot generates code that
does not need stack banging (e.g., stubs), RBP is assigned anincorrect
value. For stubs, RBP is 8 bytes off the incorrect value (e.g., RBP
contains the value 0x108 instead of 0x100 for the above example).
Solution: Change MacroAssembler::verified_entry() to set up RBP
correctly when generating stub code. Setting up RBP is now done the same
way as it is done for compiled code (i.e., when stack banging is needed).
- JPRT (testset hotspot), all tests pass;
- locally executed all hotspot JTREG tests and all JTREG tests in
jdk/test/java/lang/invoke, all tests pass that pass with an unmodified VM.
Many thanks to Hongxi Sy for reporting this problem.
Thank you and best regards,
More information about the hotspot-compiler-dev