RFR(S) 8134898: Small fixes found during JVMCI work
Coleen Phillimore
coleen.phillimore at oracle.com
Wed Sep 2 03:55:53 UTC 2015
On 9/1/15 7:59 PM, Vladimir Kozlov wrote:
> http://cr.openjdk.java.net/~kvn/8134898/webrev/
> https://bugs.openjdk.java.net/browse/JDK-8134898
>
> During review of JVMCI changes we were asked to push not related small
> changes separately.
>
> Removed jre/ from jdk paths in makefiles since jdk9 does not have it
> anymore.
> Solaris vm.make and buildtree.make missed changes other unix platforms
> have.
> Fix type in doc.
> Added -DCHECK_UNHANDLED_OOPS to debug build. I very strongly want to
> do that.
Adding -DCHECK_UNHANDLED_OOPS to the debug build adds a level of
indirection to the oops that are somewhat annoying during debugging:
eg.
692 void java_lang_Class::set_component_mirror(oop java_class, oop
comp_mirror) {
693 assert(_component_mirror_offset != 0, "must be set");
694 java_class->obj_field_put(_component_mirror_offset, comp_mirror);
695 }
(gdb) print java_class
$7 = {_o = 0x8cb003b8}
(gdb) print java_mirror
No symbol "java_mirror" in current context.
(gdb) print comp_mirror
$8 = {_o = 0x8cb001b0}
(gdb) call hsfind(java_class._o)
warning: Using non-standard conversion to match function hsfind to
supplied arguments
"Executing hsfind"
0x000000008cb003b8 is an oop
java.lang.Class
- klass: 'java/lang/Class'
- ---- fields (total size 13 words):
...
vs.
693 assert(_component_mirror_offset != 0, "must be set");
(gdb) print java_class
$1 = (oop) 0x8cb003b8
(gdb) print comp_mirror
$2 = (oop) 0x8cb001b0
(gdb) print hsfind(java_class)
warning: Using non-standard conversion to match function hsfind to
supplied arguments
"Executing hsfind"
0x000000008cb003b8 is an oop
java.lang.Class
- klass: 'java/lang/Class'
- ---- fields (total size 13 words):
...
The GC people deal with far more 'oop' objects in their debugging, which
is why they asked me originally not to enable CHECK_UNHANDLED_OOPS in
the debug build.
To resolve the incompatibility, you can simply remove
CHECK_UNHANDLED_OOPS around the field in Thread, and put it under
#ifndef PRODUCT.
Coleen
> It is the only incompatibility in memory layout between fastdebug and
> debug VM. We maintained such compatibility for long time and it was
> broken with 7195622 changes.
> For AOT project it is very important to keep compatibility because we
> use fastdebug VM for JAOTC tool to compile aot code and we want to be
> able use debug VM to debug execution of aot code.
> Note, using debug VM with JAOTC will take 5-10 times longer to compile.
>
> Thanks,
> Vladimir
More information about the hotspot-dev
mailing list