The flag VerifyOops makes the VM insert code checking for valid oops in many places. Especially, it generates calls to the verify method in generated assembly. VerifyOops is only available in the debug build.
"8231058: VerifyOops crashes with assert(_offset >= 0) failed: offset for non comment?" added a test that enables VerifyOops. This test causes the VM to crash on ppc because the VerifyOops code had not been maintained. It has been broken since the port was first submitted.
The crash is caused by passing compressed oops from
LIR_Assembler::store() to the checker routine.
This is fixed by implementing a checker routine verify_coop
that first decompresses the coop. This makes the new
test pass.
Further testing showed that the additional checker
coding makes Patching Stubs overflow. These
can not be increased in size to fit the code.
JDK-8233081 assures the verify code is not copied to
the Patching Stub eliminating this problem.
Further the change extends the message printed when verification
of an oop failed. First, it prints the location in the source
code where the checker code was generated. Second,
it now prints the faulty oop.
Also the message printed when PatchingStubs
overflow is improved.
The change extends the test to run with and without compressed oops.