# HG changeset patch # User Christos Kotselidis # Date 1362411997 -3600 # Node ID 96a337d307bdb539e3307b4cbde13a75b9550761 # Parent c158d128fae9205ca7503e2eb7bf92eab793a75c -More progress in G1 WBs diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotRuntime.java Mon Mar 04 16:46:37 2013 +0100 @@ -38,6 +38,7 @@ import static com.oracle.graal.hotspot.nodes.VerifyOopStubCall.*; import static com.oracle.graal.hotspot.nodes.WriteBarrierPreStubCall.*; import static com.oracle.graal.hotspot.nodes.WriteBarrierPostStubCall.*; +import static com.oracle.graal.hotspot.nodes.VerOopStubCall.*; import static com.oracle.graal.hotspot.snippets.AESCryptSubstitutions.DecryptBlockStubCall.*; import static com.oracle.graal.hotspot.snippets.AESCryptSubstitutions.EncryptBlockStubCall.*; import static com.oracle.graal.hotspot.snippets.CipherBlockChainingSubstitutions.DecryptAESCryptStubCall.*; @@ -93,6 +94,11 @@ /* temps */ null, /* ret */ ret(Kind.Void), /* arg0: object */ javaCallingConvention(Kind.Object)); + + addRuntimeCall(VEROOPCALL, config.verOopStub, + /* temps */ null, + /* ret */ ret(Kind.Void), + /* arg0: object */ javaCallingConvention(Kind.Object)); addRuntimeCall(WBPOSTCALL, config.wbPostCallStub, /* temps */ null, diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Mar 04 16:46:37 2013 +0100 @@ -328,6 +328,7 @@ public long monitorExitStub; public long wbPreCallStub; public long wbPostCallStub; + public long verOopStub; public long verifyOopStub; public long vmErrorStub; public long deoptimizeStub; diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeArrayNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeArrayNode.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeArrayNode.java Mon Mar 04 16:46:37 2013 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -72,7 +73,7 @@ } public boolean fillContents() { - return fillContents; + return HotSpotGraalRuntime.getInstance().getConfig().useG1GC ? true : fillContents; } public boolean locked() { diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeObjectNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeObjectNode.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/InitializeObjectNode.java Mon Mar 04 16:46:37 2013 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.hotspot.nodes; import com.oracle.graal.api.meta.*; +import com.oracle.graal.hotspot.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -56,7 +57,7 @@ } public boolean fillContents() { - return fillContents; + return HotSpotGraalRuntime.getInstance().getConfig().useG1GC ? true : fillContents; } public boolean locked() { diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPost.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPost.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPost.java Mon Mar 04 16:46:37 2013 +0100 @@ -25,8 +25,9 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.nodes.type.*; -public final class WriteBarrierPost extends WriteBarrier implements Lowerable { +public final class WriteBarrierPost extends FixedWithNextNode implements Lowerable { @Input private ValueNode object; @Input private ValueNode value; @@ -45,6 +46,7 @@ } public WriteBarrierPost(ValueNode object, ValueNode value, LocationNode location) { + super(StampFactory.forVoid()); this.object = object; this.value = value; this.location = location; diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPre.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPre.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrierPre.java Mon Mar 04 16:46:37 2013 +0100 @@ -25,8 +25,9 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.nodes.type.*; -public final class WriteBarrierPre extends WriteBarrier implements Lowerable { +public final class WriteBarrierPre extends FixedWithNextNode implements Lowerable { @Input private ValueNode object; @Input private LocationNode location; @@ -46,6 +47,7 @@ } public WriteBarrierPre(ValueNode object, LocationNode location, boolean doLoad) { + super(StampFactory.forVoid()); this.object = object; this.doLoad = doLoad; this.location = location; diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSubstitutions.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/SystemSubstitutions.java Mon Mar 04 16:46:37 2013 +0100 @@ -42,8 +42,9 @@ public static final Descriptor JAVA_TIME_MILLIS = new Descriptor("javaTimeMillis", false, long.class); public static final Descriptor JAVA_TIME_NANOS = new Descriptor("javaTimeNanos", false, long.class); - @MacroSubstitution(macro = ArrayCopyNode.class) - public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); + // @MacroSubstitution(macro = ArrayCopyNode.class) + // public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int +// length); @MethodSubstitution public static long currentTimeMillis() { diff -r c158d128fae9 -r 96a337d307bd graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java Thu Feb 28 17:39:48 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java Mon Mar 04 16:46:37 2013 +0100 @@ -55,24 +55,22 @@ } @Snippet - public static void g1PreWriteBarrier(@Parameter("object") Object object, @Parameter("location") Object location, @ConstantParameter("doLoad") boolean doLoad, @ConstantParameter("kind") int kind, - @Parameter("fieldName") String fn) { + public static void g1PreWriteBarrier(@Parameter("object") Object object, @Parameter("location") Object location, @ConstantParameter("doLoad") boolean doLoad) { Word thread = thread(); + trace(WriteBarrierSnippets.TRACE, "---------------G1 PRE Enter: %lu\n", Word.unsigned(g1PreCounter.value())); Pointer oop = Word.fromObject(object); Pointer field = Word.fromArray(object, location); Pointer previousOop = field.readWord(0); + VerOopStubCall.call(oop); + byte markingValue = thread.readByte(HotSpotSnippetUtils.g1SATBQueueMarkingOffset()); Word bufferAddress = thread.readWord(HotSpotSnippetUtils.g1SATBQueueBufferOffset()); Word indexAddress = thread.add(HotSpotSnippetUtils.g1SATBQueueIndexOffset()); Word indexValue = thread.readWord(HotSpotSnippetUtils.g1SATBQueueIndexOffset()); - Log.print(fn); - traceObject(WriteBarrierSnippets.TRACE, "In PRE WB", object); - // traceObject(WriteBarrierSnippets.TRACE, "WriteField" + fn, object); - trace(WriteBarrierSnippets.TRACE, " G1 PRE KIND: %d\n", Word.signed(kind)); trace(WriteBarrierSnippets.TRACE, " G1 PRE thread address: 0x%16lx\n", thread); trace(WriteBarrierSnippets.TRACE, " G1 PRE oop: 0x%16lx\n", oop); trace(WriteBarrierSnippets.TRACE, " G1 PRE field: 0x%16lx\n", field); @@ -81,7 +79,6 @@ trace(WriteBarrierSnippets.TRACE, " G1 PRE QueueBufferOffset: 0x%016lx\n", Word.signed(HotSpotSnippetUtils.g1SATBQueueBufferOffset())); trace(WriteBarrierSnippets.TRACE, " G1 PRE QueueIndexOffset: 0x%016lx\n", Word.signed(HotSpotSnippetUtils.g1SATBQueueIndexOffset())); trace(WriteBarrierSnippets.TRACE, " G1 PRE markingValue: 0x%016lx\n", Word.signed((int) markingValue)); - trace(WriteBarrierSnippets.TRACE, " G1 PRE bufferAddress: 0x%016lx\n", bufferAddress); trace(WriteBarrierSnippets.TRACE, " G1 PRE indexAddress: 0x%016lx\n", indexAddress); trace(WriteBarrierSnippets.TRACE, " G1 PRE indexValue: 0x%016lx\n", indexValue);// in @@ -95,9 +92,14 @@ if (indexValue.notEqual(Word.zero())) { Word nextIndex = indexValue.subtract(HotSpotSnippetUtils.wordSize()); Word logAddress = bufferAddress.add(nextIndex); + trace(WriteBarrierSnippets.TRACE, " G1 PRE logAddress: 0x%016lx\n", logAddress); + logAddress.writeWord(0, previousOop); indexAddress.writeWord(0, nextIndex); - trace(WriteBarrierSnippets.TRACE, " G1 PRE nextIndexindex: 0x%016lx\n", nextIndex); + + trace(WriteBarrierSnippets.TRACE, " G1 PRE nextIndex: 0x%016lx\n", indexAddress.readWord(0)); + trace(WriteBarrierSnippets.TRACE, " G1 PRE writtenLogValue: 0x%016lx\n", logAddress.readWord(0)); + } else { WriteBarrierPreStubCall.call(previousOop); } @@ -113,11 +115,12 @@ public static void g1PostWriteBarrier(@Parameter("object") Object object, @Parameter("value") Object value, @Parameter("location") Object location) { Word thread = thread(); trace(WriteBarrierSnippets.TRACE, "---------------G1 POST Enter: %lu\n", Word.unsigned(g1PostCounter.value())); - Pointer oop = Word.fromObject(object); Pointer field = Word.fromArray(object, location); Pointer writtenValue = Word.fromObject(value); + VerOopStubCall.call(oop); + Word bufferAddress = thread.readWord(HotSpotSnippetUtils.g1CardQueueBufferOffset()); Word indexAddress = thread.add(HotSpotSnippetUtils.g1CardQueueIndexOffset()); Word indexValue = thread.readWord(HotSpotSnippetUtils.g1CardQueueIndexOffset()); @@ -152,7 +155,6 @@ if (xorResult.notEqual(Word.zero())) { if (writtenValue.notEqual(Word.zero())) { - // Word cardValue = base.readWord(displacement); byte cardByte = cardAddress.readByte(0); trace(WriteBarrierSnippets.TRACE, " G1 POST cardAddress: 0x%016lx\n", cardAddress); trace(WriteBarrierSnippets.TRACE, " G1 POST cardValue: %d\n", Word.signed(cardByte)); @@ -177,7 +179,6 @@ // } trace(WriteBarrierSnippets.TRACE, "---------------G1 POST EXIT: %lu\n", Word.unsigned(g1PostCounter.value())); g1PostCounter.inc(); - } private static void trace(boolean enabled, String format, WordBase value) { @@ -188,8 +189,6 @@ @Snippet public static void serialFieldWriteBarrier(@Parameter("object") Object object) { - assert true; - verifyOop(object); Pointer oop = Word.fromObject(object); Word base = (Word) oop.unsignedShiftRight(cardTableShift()); long startAddress = cardTableStart(); @@ -204,8 +203,6 @@ @Snippet public static void serialArrayWriteBarrier(@Parameter("object") Object object, @Parameter("location") Object location) { - assert true; - Pointer oop = Word.fromArray(object, location); Word base = (Word) oop.unsignedShiftRight(cardTableShift()); long startAddress = cardTableStart(); @@ -230,12 +227,10 @@ super(runtime, assumptions, target, WriteBarrierSnippets.class); serialFieldWriteBarrier = snippet("serialFieldWriteBarrier", Object.class); serialArrayWriteBarrier = snippet("serialArrayWriteBarrier", Object.class, Object.class); - g1PreWriteBarrier = snippet("g1PreWriteBarrier", Object.class, Object.class, boolean.class, int.class, String.class); + g1PreWriteBarrier = snippet("g1PreWriteBarrier", Object.class, Object.class, boolean.class); g1PostWriteBarrier = snippet("g1PostWriteBarrier", Object.class, Object.class, Object.class); this.useG1GC = useG1GC; System.out.println(" useG1GC? " + (useG1GC ? "true" : "false")); - System.out.println("logHRBytes " + HotSpotSnippetUtils.logOfHRGrainBytes()); - System.out.println("wordsize " + HotSpotSnippetUtils.wordSize()); } public void lower(ArrayWriteBarrier arrayWriteBarrier, @SuppressWarnings("unused") LoweringTool tool) { @@ -261,12 +256,10 @@ ResolvedJavaMethod method = g1PreWriteBarrier; Key key = new Key(method); key.add("doLoad", writeBarrierPre.doLoad()); - key.add("kind", writeBarrierPre.location().getValueKind().ordinal()); Arguments arguments = new Arguments(); arguments.add("object", writeBarrierPre.object()); arguments.add("location", writeBarrierPre.location()); - arguments.add("fieldName", writeBarrierPre.getName()); SnippetTemplate template = cache.get(key, assumptions); template.instantiate(runtime, writeBarrierPre, DEFAULT_REPLACER, arguments); diff -r c158d128fae9 -r 96a337d307bd src/cpu/x86/vm/c1_Runtime1_x86.cpp --- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -1745,6 +1745,7 @@ __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index))); #endif + tty->print_cr("Intepreter WB"); __ cmpb(Address(card_addr, 0), 0); __ jcc(Assembler::equal, done); diff -r c158d128fae9 -r 96a337d307bd src/cpu/x86/vm/graalRuntime_x86.cpp --- a/src/cpu/x86/vm/graalRuntime_x86.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/cpu/x86/vm/graalRuntime_x86.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -1195,17 +1195,17 @@ case graal_wb_pre_call_id: { Register obj = j_rarg0; { - // GraalStubFrame f(sasm, "graal_wb_pre_call", dont_gc_arguments); - //OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); + GraalStubFrame f(sasm, "graal_wb_pre_call", dont_gc_arguments); + OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); // note: really a leaf routine but must setup last java sp // => use call_RT for now (speed can be improved by // doing last java sp setup manually) int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_pre_call), obj); - //oop_maps = new OopMapSet(); - //oop_maps->add_gc_map(call_offset, map); - //restore_live_registers(sasm, save_fpu_registers); + oop_maps = new OopMapSet(); + oop_maps->add_gc_map(call_offset, map); + restore_live_registers(sasm, save_fpu_registers); } __ ret(0); break; @@ -1213,21 +1213,39 @@ case graal_wb_post_call_id: { Register obj = j_rarg0; { - // GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments); - //OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); + GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments); + OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); // note: really a leaf routine but must setup last java sp // => use call_RT for now (speed can be improved by // doing last java sp setup manually) int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_post_call), obj); - //oop_maps = new OopMapSet(); - //oop_maps->add_gc_map(call_offset, map); - // restore_live_registers(sasm, save_fpu_registers); + oop_maps = new OopMapSet(); + oop_maps->add_gc_map(call_offset, map); + restore_live_registers(sasm, save_fpu_registers); } __ ret(0); break; } + case graal_ver_oop_id: { + Register obj = j_rarg0; + { + GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments); + OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); + + // note: really a leaf routine but must setup last java sp + // => use call_RT for now (speed can be improved by + // doing last java sp setup manually) + int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_ver_oop), obj); + + oop_maps = new OopMapSet(); + oop_maps->add_gc_map(call_offset, map); + restore_live_registers(sasm, save_fpu_registers); + } + __ ret(0); + break; + } case graal_identity_hash_code_id: { Register obj = j_rarg0; // Incoming __ set_info("identity_hash_code", dont_gc_arguments); diff -r c158d128fae9 -r 96a337d307bd src/share/vm/gc_implementation/g1/g1_globals.hpp --- a/src/share/vm/gc_implementation/g1/g1_globals.hpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/gc_implementation/g1/g1_globals.hpp Mon Mar 04 16:46:37 2013 +0100 @@ -41,10 +41,10 @@ develop(intx, G1MarkingVerboseLevel, 0, \ "Level (0-4) of verboseness of the marking code") \ \ - develop(bool, G1PrintReachableAtInitialMark, false, \ + develop(bool, G1PrintReachableAtInitialMark, true, \ "Reachable object dump at the initial mark pause") \ \ - develop(bool, G1VerifyDuringGCPrintReachable, false, \ + develop(bool, G1VerifyDuringGCPrintReachable, true, \ "If conc mark verification fails, dump reachable objects") \ \ develop(ccstr, G1PrintReachableBaseFile, NULL, \ diff -r c158d128fae9 -r 96a337d307bd src/share/vm/graal/graalCompilerToVM.cpp --- a/src/share/vm/graal/graalCompilerToVM.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -723,6 +723,7 @@ set_long("monitorExitStub", VmIds::addStub(GraalRuntime::entry_for(GraalRuntime::graal_monitorexit_id))); set_long("wbPreCallStub", VmIds::addStub(GraalRuntime::entry_for(GraalRuntime::graal_wb_pre_call_id))); set_long("wbPostCallStub", VmIds::addStub(GraalRuntime::entry_for(GraalRuntime::graal_wb_post_call_id))); + set_long("verOopStub", VmIds::addStub(GraalRuntime::entry_for(GraalRuntime::graal_ver_oop_id))); set_long("verifyOopStub", VmIds::addStub(GraalRuntime::entry_for(GraalRuntime::graal_verify_oop_id))); set_long("vmErrorStub", VmIds::addStub(GraalRuntime::entry_for(GraalRuntime::graal_vm_error_id))); set_long("deoptimizeStub", VmIds::addStub(SharedRuntime::deopt_blob()->uncommon_trap())); diff -r c158d128fae9 -r 96a337d307bd src/share/vm/graal/graalRuntime.cpp --- a/src/share/vm/graal/graalRuntime.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/graal/graalRuntime.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -29,7 +29,7 @@ #include "prims/jvm.h" #include "runtime/biasedLocking.hpp" #include "runtime/interfaceSupport.hpp" - +#include "utilities/debug.hpp" // Implementation of GraalStubAssembler GraalStubAssembler::GraalStubAssembler(CodeBuffer* code, const char * name, int stub_id) : MacroAssembler(code) { @@ -483,14 +483,32 @@ } JRT_END +static const bool TRACE_WB=true; + JRT_LEAF(void, GraalRuntime::graal_wb_pre_call(JavaThread* thread, oopDesc* obj)) - tty->print_cr("HELLO PRE WRITE BARRIER"); +if(TRACE_WB) tty->print_cr("HELLO PRE WRITE BARRIER"); SharedRuntime::g1_wb_pre(obj, thread); JRT_END JRT_LEAF(void, GraalRuntime::graal_wb_post_call(JavaThread* thread, oopDesc* obj, void* card_addr)) - tty->print_cr("HELLO POST WRITE BARRIER Card address 0x%016lx", card_addr); + if(TRACE_WB) tty->print_cr("HELLO POST WRITE BARRIER Card address 0x%016lx", card_addr); thread->dirty_card_queue().enqueue(card_addr); +//if(!((CardTableModRefBS*)(Universe::heap()->barrier_set()))->is_valid_card_address(obj,(signed char*)card_addr)) { +// tty->print_cr("Invalid worker start card"); +//} + + +JRT_END + +JRT_LEAF(void, GraalRuntime::graal_ver_oop(JavaThread* thread, oopDesc* obj)) +if(!TRACE_WB) return; +if(obj==NULL) tty->print_cr("ERROR NULL in verifyoop G1 in method obj " INTPTR_FORMAT, obj); +if (obj!=NULL &&!obj->is_oop()) { + tty->print_cr("ERROR in verifyoop G1 in method obj " INTPTR_FORMAT, obj); + +}else { + tty->print_cr("PASS in verifyoop G1 in method obj " INTPTR_FORMAT, obj); +} JRT_END JRT_LEAF(void, GraalRuntime::graal_monitorexit(JavaThread* thread, oopDesc* obj, BasicLock* lock)) @@ -526,6 +544,14 @@ JRT_END JRT_ENTRY(void, GraalRuntime::graal_log_object(JavaThread* thread, oop obj, jint flags)) +if (!obj->is_oop()) { + tty->print_cr("ERROR in verifyoop G1 in method obj " INTPTR_FORMAT, obj); + +}else { + tty->print_cr("WIN in verifyoop G1 in method obj " INTPTR_FORMAT, obj); +} + +if(obj==NULL) return; bool string = mask_bits_are_true(flags, LOG_OBJECT_STRING); bool address = mask_bits_are_true(flags, LOG_OBJECT_ADDRESS); bool newline = mask_bits_are_true(flags, LOG_OBJECT_NEWLINE); diff -r c158d128fae9 -r 96a337d307bd src/share/vm/graal/graalRuntime.hpp --- a/src/share/vm/graal/graalRuntime.hpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/graal/graalRuntime.hpp Mon Mar 04 16:46:37 2013 +0100 @@ -105,6 +105,7 @@ stub(graal_thread_is_interrupted) \ stub(graal_wb_pre_call) \ stub(graal_wb_post_call) \ + stub(graal_ver_oop) \ last_entry(number_of_ids) #define DECLARE_STUB_ID(x) x ## _id , @@ -142,8 +143,11 @@ static address exception_handler_for_pc(JavaThread* thread); + static void graal_verify_oop(JavaThread* thread, oopDesc* obj); static void graal_wb_pre_call(JavaThread* thread, oopDesc* obj); + static void graal_wb_post_call(JavaThread* thread, oopDesc* obj,void* obj); + static void graal_ver_oop(JavaThread* thread, oopDesc* obj); static void graal_create_null_exception(JavaThread* thread); static void graal_create_out_of_bounds_exception(JavaThread* thread, jint index); static void graal_monitorenter(JavaThread* thread, oopDesc* obj, BasicLock* lock); diff -r c158d128fae9 -r 96a337d307bd src/share/vm/memory/cardTableModRefBS.hpp --- a/src/share/vm/memory/cardTableModRefBS.hpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/memory/cardTableModRefBS.hpp Mon Mar 04 16:46:37 2013 +0100 @@ -267,6 +267,15 @@ card_size_in_words = card_size / sizeof(HeapWord) }; + bool is_valid_card_address(void* p, jbyte* addr) { + size_t ind=index_for(p); + tty->print_cr("C cardValue? %d cardAddress 0x%08x offset %d", _byte_map[ind], addr, ind); + //for(size_t i=0;i<30000;i++) { + // tty->print_cr("C cardIndex %d val %d",i, _byte_map[i]); + + //} + return (addr >= _byte_map) && (addr < _byte_map + _byte_map_size); + } static int clean_card_val() { return clean_card; } static int clean_card_mask_val() { return clean_card_mask; } static int dirty_card_val() { return dirty_card; } diff -r c158d128fae9 -r 96a337d307bd src/share/vm/opto/graphKit.cpp --- a/src/share/vm/opto/graphKit.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/opto/graphKit.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -3761,12 +3761,14 @@ Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); __ if_then(card_val, BoolTest::ne, zero); { + tty->print_cr("Object hotspot mark card"); g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); } __ end_if(); } __ end_if(); } __ end_if(); } else { // Object.clone() instrinsic uses this path. + tty->print_cr("Object clone mark card"); g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); } diff -r c158d128fae9 -r 96a337d307bd src/share/vm/prims/jni.cpp --- a/src/share/vm/prims/jni.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/prims/jni.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -2670,6 +2670,7 @@ if (needs_barrier) { oop referent = JNIHandles::resolve(ret); + tty->print_cr("ENQUEUE in jni"); G1SATBCardTableModRefBS::enqueue(referent); } } diff -r c158d128fae9 -r 96a337d307bd src/share/vm/prims/unsafe.cpp --- a/src/share/vm/prims/unsafe.cpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/prims/unsafe.cpp Mon Mar 04 16:46:37 2013 +0100 @@ -208,6 +208,8 @@ } if (needs_barrier) { + tty->print_cr("GENERATE PRE BARRIER UNSAFE"); + oop referent = JNIHandles::resolve(ret); G1SATBCardTableModRefBS::enqueue(referent); } @@ -266,6 +268,8 @@ } if (needs_barrier) { + tty->print_cr("GENERATE PRE BARRIER UNSAFE"); + oop referent = JNIHandles::resolve(ret); G1SATBCardTableModRefBS::enqueue(referent); } diff -r c158d128fae9 -r 96a337d307bd src/share/vm/utilities/debug.hpp --- a/src/share/vm/utilities/debug.hpp Thu Feb 28 17:39:48 2013 +0100 +++ b/src/share/vm/utilities/debug.hpp Mon Mar 04 16:46:37 2013 +0100 @@ -160,6 +160,16 @@ } while (0) #endif // #ifndef USE_REPEATED_ASSERTS +#define assert1(p, msg) +do { \ + for (int __i = 0; __i < AssertRepeat; __i++) { \ + if (!(p)) { \ + report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", msg); \ + BREAKPOINT; \ + } \ + } \ +} while (0) + // This version of assert is for use with checking return status from // library calls that return actual error values eg. EINVAL, // ENOMEM etc, rather than returning -1 and setting errno.