[rvm-research] Verification of object references in the IA32 baseline compiler using Mmapper.addressIsMapped(..)
Erik Brangs <[email protected]> Mon, 5 Mar 2018 16:23:09 +0100
| Newsgroups | gmane.comp.java.jikes.rvm.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi,
the IA32 baseline compiler currently contains code to verify instances of ObjectReference on creation. The code is currently disabled and won't work when enabled. I've been trying to get it working again.
My local version for the verification of ObjectReference uses Space.isMappedAddress(addr). This seems to work fine in most cases but it fails for some references. For example, I'm seeing failures in unit tests that look like this:
address outside heap, addr = 0x0000120100600000
space index for addr: 9
space != null true
HeapLayout.mmapper.addressIsMapped(address): false
Key: (I)mmortal (N)onmoving (D)iscontiguous (E)xtent (F)raction
HEAP_START 0x0000020000000000
AVAILABLE_START 0x000002000dc00000
boot IN 0x0000020000000000->0x000003ffffffffff E 0x0000020000000000
immortal IN 0x0000040000000000->0x000005ffffffffff E 0x0000020000000000
meta N 0x0000060000000000->0x000007ffffffffff E 0x0000020000000000
los N 0x0000080000000000->0x000009ffffffffff E 0x0000020000000000
sanity N 0x00000a0000000000->0x00000bffffffffff E 0x0000020000000000
non-moving N 0x00000c0000000000->0x00000dffffffffff E 0x0000020000000000
sm-code N 0x00000e0000000000->0x00000fffffffffff E 0x0000020000000000
lg-code N 0x0000100000000000->0x000011ffffffffff E 0x0000020000000000
nursery 0x00001e0000000000->0x00001fffffffffff E 0x0000020000000000
immix N 0x0000120000000000->0x000013ffffffffff E 0x0000020000000000
AVAILABLE_END 0x0000200000000000
HEAP_END 0x0000200000000000
The address ought to be in the immix space but *Mmapper considers it to be not mapped. This happens both on x86 and x64. It seems to happen during GC:
(0x68c9dbfc 14157) at [0x68c9dbfc, 0x642f9009] Lorg/jikesrvm/VM; sysFail(Ljava/lang/String;)V at line 2317 at bytecode index 27 at machine code offset 0x0000006c
(0x68c9dc18 1931) at [0x68c9dc18, 0x6425cce2] Lorg/jikesrvm/compilers/baseline/ia32/BaselineMagic; check(Lorg/vmmagic/unboxed/Address;)V at line 160 at bytecode index 9 at machine code offset 0x00000039
(0x68c9dc64 6756) at [0x68c9dc64, 0x6425d8bb] Lorg/jikesrvm/mm/mmtk/ObjectModel; copyScalar(Lorg/vmmagic/unboxed/ObjectReference;Lorg/jikesrvm/objectmodel/TIB;Lorg/jikesrvm/classloader/RVMClass;I)Lorg/vmmagic/unboxed/ObjectReference; at line 65 at bytecode index 81 at machine code offset 0x0000012e
(0x68c9dca0 6730) at [0x68c9dca0, 0x640bc255] Lorg/jikesrvm/mm/mmtk/ObjectModel; copy(Lorg/vmmagic/unboxed/ObjectReference;I)Lorg/vmmagic/unboxed/ObjectReference; at line 50 at bytecode index 31 at machine code offset 0x0000009f
(0x68c9dcd8 6803) at [0x68c9dcd8, 0x640cad7c] Lorg/mmtk/policy/CopySpace; traceObject(Lorg/mmtk/plan/TransitiveClosure;Lorg/vmmagic/unboxed/ObjectReference;I)Lorg/vmmagic/unboxed/ObjectReference; at line 209 at bytecode index 54 at machine code offset 0x000000e9
(0x68c9dd04 12764) at [0x68c9dd04, 0x640a897e] Lorg/mmtk/plan/generational/GenNurseryTraceLocal; traceObject(Lorg/vmmagic/unboxed/ObjectReference;)Lorg/vmmagic/unboxed/ObjectReference; at line 78 at bytecode index 14 at machine code offset 0x00000050
(0x68c9dd2c 8499) at [0x68c9dd2c, 0x640a92ab] Lorg/mmtk/plan/TraceLocal; traceObject(Lorg/vmmagic/unboxed/ObjectReference;Z)Lorg/vmmagic/unboxed/ObjectReference; at line 305 at bytecode index 2 at machine code offset 0x00000032
(0x68c9dd60 8487) at [0x68c9dd60, 0x642835a6] Lorg/mmtk/plan/TraceLocal; processEdge(Lorg/vmmagic/unboxed/ObjectReference;Lorg/vmmagic/unboxed/Address;)V at line 97 at bytecode index 14 at machine code offset 0x00000067
(0x68c9dd98 7344) at [0x68c9dd98, 0x642836c6] Lorg/jikesrvm/mm/mminterface/SpecializedScanMethod; fallback(Ljava/lang/Object;Lorg/mmtk/plan/TransitiveClosure;)V at line 201 at bytecode index 87 at machine code offset 0x00000152
(0x68c9ddc0 7343) at [0x68c9ddc0, 0x643071f0] Lorg/jikesrvm/mm/mminterface/SpecializedScanMethod; invoke(ILjava/lang/Object;Lorg/mmtk/plan/TransitiveClosure;)V at line 191 at bytecode index 2 at machine code offset 0x0000002e
(0x68c9ddf4 1496) at [0x68c9ddf4, 0x6430733d] Lorg/jikesrvm/mm/mminterface/HandInlinedScanning; scanObject(IILjava/lang/Object;Lorg/mmtk/plan/TransitiveClosure;Z)V at line 160 at bytecode index 65 at machine code offset 0x000000f0
(0x68c9de2c 1494) at [0x68c9de2c, 0x6425c796] Lorg/jikesrvm/mm/mminterface/HandInlinedScanning; scanObject(IILjava/lang/Object;Lorg/mmtk/plan/TransitiveClosure;)V at line 127 at bytecode index 5 at machine code offset 0x0000003d
(0x68c9de64 9179) at [0x68c9de64, 0x640a8eb9] Lorg/jikesrvm/mm/mmtk/Scanning; specializedScanObject(ILorg/mmtk/plan/TransitiveClosure;Lorg/vmmagic/unboxed/ObjectReference;)V at line 69 at bytecode index 14 at machine code offset 0x00000056
(0x68c9de90 8493) at [0x68c9de90, 0x640a83ca] Lorg/mmtk/plan/TraceLocal; scanObject(Lorg/vmmagic/unboxed/ObjectReference;)V at line 181 at bytecode index 16 at machine code offset 0x0000004d
(0x68c9deb4 8511) at [0x68c9deb4, 0x640c4d6c] Lorg/mmtk/plan/TraceLocal; completeTrace()V at line 495 at bytecode index 52 at machine code offset 0x000000f2
(0x68c9ded8 14389) at [0x68c9ded8, 0x640cb55a] Lorg/mmtk/plan/generational/GenCollector; collectionPhase(SZ)V at line 113 at bytecode index 144 at machine code offset 0x00000218
(0x68c9df08 14428) at [0x68c9df08, 0x64315640] Lorg/mmtk/plan/generational/immix/GenImmixCollector; collectionPhase(SZ)V at line 158 at bytecode index 136 at machine code offset 0x00000202
Should the address be considered mapped at that point?
Kind regards,
Erik Brangs
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot